알고리즘

[SoftTalk] 지난 2개월 간의 진보와 교훈

Algorithmus 2022. 3. 26. 03:43

지난 두 달 간

약 200여 개의 문제를 고민하고 풀이를 이해했다. 실제로 코딩을 해 본 것도 있었지만 대체로 말을 하면서 손으로 코드를 적고 모범 코드와 맞춰보면서 내가 로직을 맞게 가져간 것인지를 확인한 것이 많았다. 물론 처음에는 자료구조나 알고리즘 자체에 대한 이해가 미진해서 아예 답을 떠올릴 수도 답안을 봐도 이해 할 수도 없어 며칠을 고민해야 했던 문제도 많았다. 하지만 지나고 나면 그것이 다 실력이 되었다. 이런 경험을 한 번도 해 본 적이 없는 것 같다. 고등학교 때 수학문제를 보면 그저 풀이를 외웠던 것 같다. 하지만 지금은 내 마인드 자체가 알고리즘적으로 사고하게 된 것 같다. 그리고 침착해졌다. 얼마전에는 고급 그래프 알고리즘 중 대표적인 것을 공부하고 코드를 정리했다. 앞으로 그 부분도 포함해서 문제를 풀고자 한다.

두뇌의 작용 - 견디면 풀린다

오늘 생각해서 바로 풀이를 생각할 수 없거나 다른 모범답안을 보더라도 이해가지 않는 것은 오늘 고민을 치열하게 해보다가 내일 또 일어나서 보면 이해가 조금 더 진보한 것을 느낄 수 있었다. 두뇌는 신기해서 그런 훈련 과정을 통해 조금씩 성장한다는 것을 경험적으로 알 수 있었다. 오늘 정말 모르겠고 절망적이어도 내일의 또 다른 나는 그 문제를 이해할 수 있다는 희망을 유지하면 좋겠다.

답안을 본 뒤 이해도 점검의 좋은 방법

내가 어떤 문제를 스스로 풀었다고 했을 때도 유사한 문제를 또 풀어봐야 한다. 조금만 조건이 달라져도 내가 짠 코드가 모든 테스트 케이스를 통과하지 않을 수 있다. 그 과정에서 내 논리의 미진한 점을 깨닫고 해당 문제에 대한 이해도가 한층 더 깊어지면서 다각도로 코드를 한 줄 한 줄 뜯어보고 이해할 수 있게 되므로 나중에 유사한 많은 사례에 모두 그 내용이 적용될 수 있는 것이다.

예를 들어 leetcode 같은 곳에서 내가 그 문제를 모범답안을 보고 베끼듯해서 풀었더라도, 시간이 지나 다시 그것을 보는 과정을 겪지 않아도, 바로 문제의 세팅이 조금 다른 문제를 풀어보면 이해도가 깊어지는 것을 알 수 있다. 그것이 예제와 유제의 관계라고 할 수 있다. 변수명, object의 구성, 입력자료의 세팅 등만 달라져도 뇌는 직전에 본 것을 그대로 카피하는 작용에서 벗어나고 이해하는 로직만을 불러오는 것 같다. 그래서 유사한 문제를 추천하는 기능을 이용해서 이들을 좀 풀어보는 것이 좋을 것 같다.

LeetCode의 유사문제 기능
Submit이 Accept되어도 유사 추천문제를 볼 수 있다.

모범 코드의 활용 방법

다른 사람이 짠 모범 코드와 내 코드를 비교하는 과정에서 알고리즘이나 논리도 배울 수 있지만 특히 파이썬 기본 구문에 대한 확실한 이해와 더불어 프로그램을 짜는 좋은 방법도 배울 수 있다. 프로그래밍은 너무도 방대하고 어렵다. 그런만큼 매번 다각도로 성장해야 한다. 개별 문제와 답을 외우는 것은 독이 되지만, 그것을 분할한 개별 구문이나 논리에 대한 정확한 이해와 기억을 통해 향후 같은 실수를 반복하지 않고 정확히 내가 구현하고자 하는 바를 나중에도 구현할 수 있도록 하는 것이 하나로 여러 문제를 해결하는, 돌 하나로 새 여럿을 잡는 공부일 것이다.

멀지만 가야할 길

유명한 competitive programmer들은 2천 문제 정도를 푸는 것 같다. 나는 이제 고작 200문제 쯤 공부했고 leetcode에서는 100문제를 앞두고 있다. 구글 입사자들은 적어도 500 문제는 푸는 것 같다. 나는 이제 20% 시점에 와 있다. 나의 허들은 1000문제일 수도 있다. 한 문제 한 문제를 열 문제에 적용될 수 있도록 기초를 탄탄히 다지다 보면, 나중에는 그 속도가 더욱 빨라져서 다음번 100문제는 지금보다 시간이 훨씬 덜 걸릴 것이라고 생각한다.

그리고, 전체주제를 쉬운 문제들로 overview 하면서 기본 알고리즘을 공부하고 난 다음에는 한 주제 중에서 유사한 문제를 쭉 푸는, BFS 이후 DFS 방식을 결합하는 것이 좋을 것 같다고 생각된다. 꾸준히, 분발하자.

반응형

'알고리즘' 카테고리의 다른 글

취미를 위한 코딩 테크트리  (0) 2022.12.20
[SoftTalk] 알고리즘 공부를 하면서  (0) 2022.03.06