알고리즘 문제풀이 단계
"프로그래밍 대회에서 배우는 알고리즘 문제해결 전략"을 읽고 요약한 내용입니다.
1단계 : 문제를 읽고 이해한다.
조급한 마음에 입출력 예제를 보고 문제가 원하는 것을 유추하면 실수할 확률이 높다.
문제를 공격적으로 읽으며 문제가 원하는 바를 정확히 이해한 후에 풀이에 들어가야한다.
2단계 : 문제를 익숙한 용어로 재정의한다.
문제를 자신의 언어로 풀어 쓴다. 즉, 문제가 요구하는 바를 추상화한다.
복잡한 문제를 우리가 아는 수학적/전산학적 개념으로 옮겨 표현한다.
어떤 부분을 추상화할지, 재정의할지에 대한 고찰은 좋은 프로그래머가 되기 위해 필수적인 과정이다.
3단계 : 어떻게 해결할지 계획을 세운다.
가장 중요한 단계이다.
문제를 어떤 방식으로 해결할 지 계획을 세우고,
사용할 알고리즘과 자료구조를 선택한다.
4단계 : 계획을 검증한다.
설계한 알고리즘이 모든 경우에 요구 조건을 정확히 수행하는 지 증명하고,
시간과 메모리가 문제의 제한 내에 들어가는 지 확인해야 한다.
5단계 : 프로그램으로 구현한다.
일련의 단계를 거쳐 짠 알고리즘을 직접 프로그램으로 작성한다.
이 때 그 구현이 부정확하거나 비효율적이면 프로그램은 정확히 동작할 수 없다.
따라서 구현 과정의 중요성도 매우 높다.
6단계 : 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.
공부하는 과정에서 가장 큰 영향을 미치는 단계이다.
두번째로 문제를 풀며, 더 효율적인 알고리즘을 찾거나 간결한 코드를 작성할 수도 있고,
같은 알고리즘을 유도하는 더욱 직관적인 방법을 찾을 수 있다.
이를 위해 문제의 간단한 해법과 접근 방식, 결정적인 깨달음을 기록하는 것이 좋다.
또한, 오답 원인도 꼭 적는 것이 좋으며 다른 사람이 작성한 코드를 보는 것도 좋은 방법이다.
당연한 절차처럼 보이지만,
막상 문제를 풀다보면 뒤죽박죽 풀게 되는 것 같아서 정리했다.
특히 문제 읽자마자 조급하게 요구사항 유추해서 푸는 사람 나야나..
문제를 잘 읽고 어렵게 생겼다고 쫄지 말고 꼼꼼하게 읽어야겠다!
의식하지 않고도 자연스럽게 저 단계를 따라서 풀 수 있도록 연습해야겠다.