1. 도입
앞에서 언급했듯이 프로그래밍 대회는 문제 해결 능력을 수련하기에 무척 좋은 환경입니다. 그러나 무작정 알고리즘을 외우고 문제를 푼다고 해서 문제 해결 실력이 쌓이는 것은 아닙니다. 문제 해결 능력은 프로그래밍 언어나 알고리즘처럼 명확히 정의된 실체가 없는 추상적인 개념이기 때문에 단순한 반복만으로 연마하기 어렵습니다. 실제로 우리는 초등학교 산수 시간부터 문제를 푸는 방법을 배우지만, 많은 경우 당장 주어진 문제를 풀기 위한 요령을 익히는 데 급급합니다. 결국 대다수 사람들의 문제 해결 기술이 기계적으로 문제를 풀면서 익힌 감과 막연한 시도에 머무르는 것이 현실입니다.
좋은 문제 해결자가 되기 위해서는 좀 더 높은 차원의 수련이 필요합니다. 이 수련의 목표는 문제를 푸는 것이 아니라 문제를 푸는 기술을 연마하는 것입니다. 이를 위해서는 자신이 문제를 어떤 방식으로 해결하는지를 의식하고 어느 부분이 부족한지, 어떤 부분을 개선해야 할지 파악해야 합니다. 이 글에서는 문제 해결 과정을 여러 단계로 나눠 보고 각 단계를 더 잘하기 위한 여러 기술들을 소개합니다.
2. 문제 해결 과정
문제 해결 과정은 단계별로 나누어 접근합니다. 문제를 해결하기 위해 거쳐 가야 하는 과정들을 세분화함으로써, 어디가 부족하고 어디를 개선해야 하는지 판단할 수 있게 됩니다. 그러면 프로그래밍 대회를 위한 여섯 단계 알고리즘을 만들어봅시다.
- 문제를 읽고 이해한다.
- 문제를 익숙한 용어로 재정의한다.
- 어떻게 해결할지 계획을 세운다.
- 계획을 검증한다.
- 프로그램으로 구현한다.
- 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.
문제를 풀지 못할 때
물론 위 문제 해결 알고리즘이 만능은 아닙니다. 언젠가는 어떻게 해도 풀리지 않는 문제에 부딪히기 마련입니다. 이런 경우에는 어떻게 해야할까요? 문제를 직접 풀기 전에는 절대로 답안을 참조하지 말라는 말도 있지만, 초보 시절에는 한 문제에 너무 매달려 있는 것도 좋지 않습니다. 일정 시간이 지나도록 고민해도 답을 찾지 못할 때는 다른 사람의 소스 코드나 풀이를 참조한다는 원칙을 세우고 이를 지키는 것이 좋습니다.
'AlgorithmBook > 알고리즘 문제해결 전략 1' 카테고리의 다른 글
[03 알고리즘 설계 패러다임] 6. 무식하게 풀기 (0) | 2025.02.07 |
---|---|
[02 알고리즘 분석] 5. 알고리즘의 정당성 증명 (0) | 2025.02.02 |
[02 알고리즘 분석] 4. 알고리즘의 시간 복잡도 분석 (0) | 2025.01.28 |
[01 문제 해결 시작하기] 3. 코딩과 디버깅에 관하여 (0) | 2025.01.28 |
[01 문제 해결 시작하기] 1. 문제 해결과 프로그래밍 대회 (0) | 2025.01.28 |