알고리즘을 공부하다보니 크게 2가지 문제로 인해 승패가 갈리는것 같았다.
- 지문 이해 및 조건파악
- 구현능력
위 2가지를 문제 풀때마다 계속 느꼈던거 같다.
지문을 잘못 이해했을때, 조건을 잘못 파악하였을때.. 전혀 엉뚱한 방향으로 문제를 풀었으며 이러한 버그(?)는 찾기도 어려웠다. 지문을 다시읽지 않는 한 절때 찾을 수 없는 문제였고 한번 이해했다고 판단한 부분은 빠르게 스킵하여 다시 읽어도 못잡았던 때가 있었다.
구현능력도 마찬가지로 문제를 풀면서 느낀거다. 시험을 보려면 당연히 구현을 해야한다. 다들 코딩테스트나 알고리즘 문제를 풀기전에 이에대한 기본개념을 먼저 준비한다. 예를들면 DFS, BFS, 재귀함수 등 다양한 개념과 알고리즘 , 자료구조를 선행학습 한 후 문제를 푼다. 이런 개념들을 많이 아는것도 중요하지만 적재적소에 알맞게 사용하는 방법이 가장 중요하다고 생각한다. 그래서 학교에서 배운 Divide and Cunquer개념을 사용하여 큰 문제를 잘개 쪼개보는 것을 적용해 보자고 생각해 보았다.
물론 위 2가지는 특별한게 아닌거 나도안다. 나도 다 공부하면서 들었던 내용이고 아마 이 글을 읽는 독자들도 대부분 알고있는 내용일 것이다. 그래도 이렇게 작성하는 이유는.. 그냥 머리속으로는 알고있지만 이렇게 문서로 남김으로서 앞으로 알고리즘 문제를 풀때 나만의 루틴을 만들려고 함이다. 아마 계속 수정되지 않을까 싶다.
현재 내가 가장 효율적이다 라고 느끼는 방식은 이렇다.
- 문제 조건 정리
- 크게 블럭단위로 문제풀 방향 설정.
- 각 블럭별 알고리즘 선택
- 코드구현
- 테케비교 및 문제를 다시 처음부터 읽고 문제조건과 맞는지 체크
다시한번 말하지만 이 5가지 방식은 나만의 방식이며 내가 이렇게 풀면 좀더 효율적이지 않을까, 처음에 말한 2가지의 문제점에 대해서 좀더 수월하게 해결되지않을까 하는 생각으로 만든것이다.
댓글