공지사항

블로그 소개 및 알고리즘 풀이 철학(ver0.1)

쓱쓱565 2021. 10. 20. 13:00

블로그 소개

  알고리즘 풀이를 공유합니다. `파이썬`을 사용합니다.

자료가 아니라 정보를 제공하는 블로그가 되었으면 합니다.

그를 위해 아래 사항을 준수하겠습니다.

 

  1. PEP8을 준수합니다.
  2. 한 줄의 코드마다 하나의 주석을 작성합니다.
  3. 문제를 풀이했던 사고과정을 정확히 명기합니다.
  4. 문제 해결에 사용했던 알고리즘이나 자료구조, 기법 등을 명기합니다.

제 블로그를 찾아주셔서 감사합니다.

아래는 주석입니다.


1. 왜 만들었는가?

  1. 알고리즘 풀이 블로그에 대한 회의감이 많았습니다. 구글링을 하다 보면 이미 누군가가 풀어둔, 때로는 제 풀이보다 여러모로 나은 풀이들을 찾아볼 수 있었습니다. 바퀴를 재발명하며 트래픽을 낭비하는 것 같은 기분이 들었습니다.
  2. 알고리즘 문제를 풀며 구글링을 많이 했습니다. 가독성 떨어지는 코드를 수없이 많이 마주했습니다. 주석도 없고 변수명도 a, b, c, d, A, B.... 같은 것을 사용하는 코드들을 읽다보면 한숨이 많이 나왔습니다.
  3. 다른 사람들의 코드를 읽고 분석했습니다. 덕분에 많이 발전했습니다. 비록 비슷한 로직의 비슷한 풀이들이었지만, 어쨌든 다양한 사람의 코드를 읽는 것 만으로 생각의 범위가 넓어졌습니다.
  4. 변수명을 잘 쓰고 주석을 잘 다는 블로거들이 고마워지기 시작했습니다.
  5. 문제를 풀다보니, 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을 따르면서 코딩을 하자 이 문제를 대부분 해소할 수 있었습니다. 

 

  1. 내 생각이 온전히 코드로 서술되었는지 한 눈에 파악할 수 있게 되자
  2. 내 코드와 문제에서 원하는 코드의 차이점이 한 눈에 보이기 시작했습니다.

  다른 파이썬 사용자 분들도 PEP8을 준수하실 것이기에, 저도 PEP8에 맞추어 코드를 작성합니다. 제 코드를 해독하는 데에 드는 시간을 최소화하고, 신속 정확하게 정보를 얻어가시길 바라기 때문입니다.

 

* 보충 자료: [PEP8을 친절하게 설명한 문서](https://realpython.com/python-pep8/)

 

문제를 해석한 사고 과정을 분명히 서술

  주석이 상세하게 작성된 코드를 읽어보더라도 여전히 코드가 이해되지 않을 때가 있습니다. '왜 그런 생각을 했는지' 가 와닿지 않기 때문이라고 생각합니다. 그래서 '문제 접근 방식'을 최대한 자세하게 서술했습니다.

 

문제 해결에 사용한 알고리즘이나 자료 구조, 기법 등을 명기

  특정 알고리즘이나 기법 등을 모르기 때문에 풀 수 없는 문제들이 있습니다. 특정 알고리즘을 연습하고 싶을 때도 있습니다. 이 부분에서 도움을 드리기 위해 이 항목을 작성합니다.