최근 알고리즘 문제를 많이 풀어보면서 마주친 문제 상황들에대해서 정리해보고 어떻게 해결할 수 있을지 생각해봤습니다.
저는 자주 문제를 어떻게 풀 것인지에대한 전략을 대략적으로만 세우고 바로 코드를 작성하는 경우가 있습니다. 보통 이런 경우에는 논리가 간단하면 문제가 없는데, 조금이라도 복잡해지면 풀면서 엉뚱한 방향으로 코드를 짜기도합니다.
그리고 생각해낸 풀이도 메모를 해놓지않아서 중간에 이상한 방향으로 빠지는 경우도 많았습니다.
이를 해결하기 위해서 코드를 작성하기 전에 종이에 메모를 하고 그 메모를 기반으로 코드를 작성하는 습관을 만들고 있습니다.
코드를 작성할 때, 단계별로 테스트를 하거나 메서드로 빼서 기능 단위로 테스트를 하면서 작성하면 디버깅 할 때도 편할텐데, 처음부터 끝까지 코드를 다 짜고 출력을 해보고 오류를 수정하려하니 불필요한 부분을 수정하는 등 코드를 점점 미궁 속으로 빠뜨리는 경우가 정말 많았습니다.
그래서 저는 이 문제를 해결하기위해서 1번에서 말했던 문제의 정보들을 잘 메모하고 기능 단위로 구현해서 테스트하는 습관을 들이려고 합니다.
문제가 길어지면 조건을 다 파악하지않고 풀이에 들어가는 경우가 많았습니다. 그러다보니 혼자서 착각해서 이해한 문제의 조건이 있거나 엉뚱한 방향으로 코드를 작성해서 코드를 전부 지우는 일도 있었습니다.
이 문제점은 심각한 문제라서 지금 가장 신경쓰는 부분입니다.
문제에서 주어진 조건과 요구사항을 따로 메모해서 빼먹은 것은 없는지 확인하려합니다.
입력의 형태나 문제의 흐름이 비슷하면 기존에 풀었던 접근 방식이나 풀이법에 갇혀서 빠져나오지 못해서 불필요하게 시간을 더 쓰는 경우도 있었습니다. 분명히 비슷한 부분은 있겠지만 같은 문제가 아니라는 생각을 반드시 가질 필요가 있습니다. 비슷한 문제로 배웠던 것들은 문제를 푸는 방법으로 잡기보다는 풀이의 방향을 잡는 참고점 정도로만 생각하는게 좋을 것 같습니다.
이 경우는 공부를 하면 해결할 수 있다고 생각합니다.