공지사항
블로그 소개
알고리즘 풀이를 공유합니다. `파이썬`을 사용합니다.
자료가 아니라 정보를 제공하는 블로그가 되었으면 합니다.
그를 위해 아래 사항을 준수하겠습니다.
- PEP8을 준수합니다.
- 한 줄의 코드마다 하나의 주석을 작성합니다.
- 문제를 풀이했던 사고과정을 정확히 명기합니다.
- 문제 해결에 사용했던 알고리즘이나 자료구조, 기법 등을 명기합니다.
제 블로그를 찾아주셔서 감사합니다.
아래는 주석입니다.
1. 왜 만들었는가?
- 알고리즘 풀이 블로그에 대한 회의감이 많았습니다. 구글링을 하다 보면 이미 누군가가 풀어둔, 때로는 제 풀이보다 여러모로 나은 풀이들을 찾아볼 수 있었습니다. 바퀴를 재발명하며 트래픽을 낭비하는 것 같은 기분이 들었습니다.
- 알고리즘 문제를 풀며 구글링을 많이 했습니다. 가독성 떨어지는 코드를 수없이 많이 마주했습니다. 주석도 없고 변수명도 a, b, c, d, A, B.... 같은 것을 사용하는 코드들을 읽다보면 한숨이 많이 나왔습니다.
- 다른 사람들의 코드를 읽고 분석했습니다. 덕분에 많이 발전했습니다. 비록 비슷한 로직의 비슷한 풀이들이었지만, 어쨌든 다양한 사람의 코드를 읽는 것 만으로 생각의 범위가 넓어졌습니다.
- 변수명을 잘 쓰고 주석을 잘 다는 블로거들이 고마워지기 시작했습니다.
- 문제를 풀다보니, solved.ac 기준 골드3 이상 문제들에 대한 풀이는 파이썬으로 찾아보기 힘들었습니다. 아마도 그 정도 난이도의 문제들을 파이썬으로 풀 수 있는 분들은 이미 현업의 세계로 떠나신 것 같습니다. 파이썬으로 비교적 고난이도 문제들의 풀이를 올리는 것이 다른분들의 알고리즘 학습에 도움이 많이 될 것이라고 생각했습니다.
그래서 블로그를 만들었습니다.
2. 지향점
PEP8을 준수하는 알고리즘 풀이
Beautiful is better than ugly. # 아름다움이 추함보다 좋다
Explicit is better than implicit. # 명시가 암시보다 좋다
Simple is better than complex. # 단순한 게 복잡한 것보다 낫다
Complex is better than complicated. # 복잡한 게 어려운 것보다 낫다.
Flat is better than nested. # 단충이 계층보다 낫다
Sparse is better than dense. # 풀어놓는 것이 압축하는 것이 낫다.
Readability counts. # 가독성은 중요하다
- Zen of Python 중에서.
알고리즘 문제들을 풀면서 왜 좋은 코드가 높은 생산성으로 이어지는지 뼈저리게 느꼈습니다. 나만 알아볼 수 있는 짧은 변수명을 쓰다가 디버깅 지옥에서 몇 시간을 헤매곤 했습니다. 대개는 이 변수가 무엇을 뜻하는지 헷갈려서나 내가 출력해야 하는 값이 특정 값인지, 특정 값의 인덱스인지 를 헷갈려서 나왔던 문제들이었습니다. PEP8을 따르면서 코딩을 하자 이 문제를 대부분 해소할 수 있었습니다.
- 내 생각이 온전히 코드로 서술되었는지 한 눈에 파악할 수 있게 되자
- 내 코드와 문제에서 원하는 코드의 차이점이 한 눈에 보이기 시작했습니다.
다른 파이썬 사용자 분들도 PEP8을 준수하실 것이기에, 저도 PEP8에 맞추어 코드를 작성합니다. 제 코드를 해독하는 데에 드는 시간을 최소화하고, 신속 정확하게 정보를 얻어가시길 바라기 때문입니다.
* 보충 자료: [PEP8을 친절하게 설명한 문서](https://realpython.com/python-pep8/)
문제를 해석한 사고 과정을 분명히 서술
주석이 상세하게 작성된 코드를 읽어보더라도 여전히 코드가 이해되지 않을 때가 있습니다. '왜 그런 생각을 했는지' 가 와닿지 않기 때문이라고 생각합니다. 그래서 '문제 접근 방식'을 최대한 자세하게 서술했습니다.
문제 해결에 사용한 알고리즘이나 자료 구조, 기법 등을 명기
특정 알고리즘이나 기법 등을 모르기 때문에 풀 수 없는 문제들이 있습니다. 특정 알고리즘을 연습하고 싶을 때도 있습니다. 이 부분에서 도움을 드리기 위해 이 항목을 작성합니다.