프로그래머스의 "큰 수 만들기" 였다. 알고리즘의 유형은 그리디였고, 그리디를 공략해야겠다! 라는 마음에 짚은 건 아니고 레벨2에서 자바스크립트로 풀 수 있는 문제들을 순서대로 풀다가 마주한 문제였기에 풀게 되었다.
사실 이렇게 버리는 게 비합리적이라는 건 이미 알고 있었다. 아무리 고민해도 답이 나오지 않는 문제는 내가 모르는 문제라는 사실, 그리고 모르는 문제라면 누군가의 도움을 통해 조금 알고 시도해보고 알고 시도해보는 과정을 반복해야 한다는 사실, 그리고 내게 주어진 시간은 무한하지 않다는 사실을 이미 알고 있었고... 더 이상 길게 적을 필요 없이 이 문제 하나만 가지고 일주일동안 붙들어야 해선 안 된다는 이유는 차고 넘칠듯이 알았다.
경험과 성장에 대한 기대때문이었다.
먼저, 취업을 준비하면서 치뤘던 코딩테스트를 제외하고 여태껏 알고리즘을 풀어보면서 이 정도로 풀리지 않는 문제를 이렇게까지 잡아본 적은 살면서 처음이었다. 그렇기 때문에 한 번 정도는 경험해 볼 필요는 있다고 생각했다. 왜냐면 이런 상황에 언젠간 마주했을 떄를 대비해 스스로에게 정신적인 백신을 놓고싶었기 떄문이다. 나중에 언젠가 이렇게 꼭 해결해야 할 문제가 있는데 도저히 풀릴 기미가 보이지 않았을 때, 다른 일을 하다가 다시 도전할 수 없는 상황이 온다면, 이전의 이 문제를 어떻게든 풀어낸 경험을 되세기면서 우직하게 나아가자는 마음가짐을 가질 수 있는 근거를 하나쯤은 만들어 보고 싶었다.
그리고 이 문제에 대해서 고민하면서 성장할 수 있을 거라는 기대를 했다. 모르는 지식에 대해서 해결할 수 있는 시중에 나온 최선의 방법들을 검색한 뒤 해결하는 것도 좋지만, 검색을 해보지 않고 일단은 고민하는 것 자체로도 성장할 수 있지 않을까 라는 기대를 하였다.
결국엔 이 문제를 다른 사람이 어떻게 시도했는지를 보고 감을 잡은 다음 코드를 작성하여 해결하였다. 완전히 내 힘으로만 풀어낸 건 아니기에 찜찜하긴 하지만, 어쨌든 풀어내긴 풀어냈다(...)
사실 이렇게 따지면 세상에 장점 없는 일은 없을 것이다. 하다못해 사람들이 입을 모아 하면 안 되는, 하면 좋지 않은 것들도 막상 해 봐서 그게 진짜 안 좋은지를 몸으로 꺠우칠 수 있었기 때문에 나름의 장점이 있다고 말할 수 있는 마법의 논리이긴 하다.
그럼에도 불구하고 나쁘지만은 않은(결코 좋은 경험이라고는 못 하겠다) 경험이었다고는 말하고 싶다. 위의 이야기를 감안하고서라도 말이다. 그 이유는 시도하면서 이뤄낸 성장이 미약하게나마 있기 때문이다.
특히 나에 대해서 조금 더 알게 되었다. 정확히 말하면 내가 개선하면 더 좋을 점에 대해서 알게 되었다. 나는 귀납적인 추론이 필수적이지 않는 이상은 최대한 연역적인 추론을 해야 하는데, 연역적인 추론을 하기가 귀찮아지면 그냥 무식하게 귀납적인 추론을 하는 쪽으로 몸이 자동으로 기운다는 걸 알게 되었다. 그래서 연역적인 추론으로만은 결론을 내기가 불가능하다는 연역적인 추론을 내리지 않는 이상, 끝까지 연역적으로 고민해야겠다는, 지워지지 않는 정도로 강렬하게 맹세한 스스로와의 약속을 하나 더 하게 되었다.
위에서 말했듯이 내 시간은 한정되어 있다. 심지어 나는 올해 4월이 되기 전까지라는 기간도 잡아놓았다. 그렇기 때문에 취업을 하기 위해 다른 역량들을 길러야 하는 상황에서 이 문제 하나에 너무 많은 시간을 투자하는 건 비합리적인 일이이었기 때문에 좋은 경험은 아니라고 할 수 있다.
"취업준비 중에서 알고리즘을 공부하는 데 문제가 풀리지 않는 상황" 이라는, 지금과 똑같은 상황이 나중에 또 닥쳤을 때 어떻게 할 지도 대책을 세워놓았다.
당연한 이야기이다.
그 한 시간 반도 한 번에 한 시간 반동안 시도하는 게 아니다. 먼저 한 시간동안 시도를 해 보고, 풀리지 않는다면 10분을 쉬었다가 다시 30분을 시도한다.
알고리즘을 알지만 그 알고리즘을 통해 문제를 해결하는 방식을 내가 생각해 내지 못 하는 상황이기 때문에, 다른 사람이 어떻게 접근했는지만 참고한다. 1차 힌트를 사용하는 느낌으로.
이젠 해설을 본다. 대신 다른 사람이 이 문제를 분석해서 나온 어떤 부분을 근거로 어떤 방법을 통해 해결하려고 했는지를 정리한다. 문제는 다시 풀지 않는다. 정리만 하고 넘어간다. 그 뒤에는 내가 해야 할 다른 공부들을 한다.
이 단계에서도 풀리지 않는다면 내가 3번을 제대로 하지 못 한 것이기 때문에 다시 문제를 읽고 정리하는 과정을 반복한다.
13일, 수요일은 좀 쉬어야겠다. 주말에 적지 못 한 한 주를 돌아보는 회고록도 써야겠다. 이걸 가지고 힘들다고 하는 것도 웃긴 일이지만, 너무 힘들었다.
그리고 다음에는 모든 문제에 대해서 이렇게 해설을 적어야겠다. 내가 제한 시간 안에 스스로 풀어낸 문제든, 아니면 다른 누군가의 조언과 도움을 통해 풀어낸 문제든간에.