"문제 해결 능력을 기르는 것은 골프 샷을 배우는 과정과 같다."

▶ 문제 해결 과정
- 문제를 읽고 이해하기 : 문제가 원하는 바를 완전히 이해하고, 사소한 제약 조건도 파악하자.
- 재정의와 추상화 : 자신이 다루기 쉬운 개념을 이용해서 문제를 자신의 언어로 풀어쓰자.
추상화 - 현실의 본질만을 남겨두고 축약하여 다루기 쉽게 표현하는 것 - 계획 세우기 : 문제를 어떤 방식으로 해결할지 결정하고, 사용할 알고리즘과 자료 구조를 선택하자.
- 계획 검증하기 : 설계한 알고리즘이 모든 경우에 요구 조건을 정확히 수행하는지를 증명하고, 수행에 걸리는 시간과 사용하는 메모리가 문제의 제한 내에 들어가는지 확인하자.
- 계획 수행하기 : 구현이 부정확하거나 비효율적이면 프로그램은 동작하지 않으므로 중요하다.
- 회고하기 : 자신이 문제를 해결한 과정을 돌이켜보고 개선하자.
'문제를 풀지 못할 때'
초보시절에는 한 문제에 너무 매달려 있는 것은 좋지 않으니 다른 사람의 소스 코드나 풀이를 참조하자.
▶ 문제 해결 전략
문제 해결 전략에서 가장 먼저 강조해야 할 것은 문제와 답의 구조에 대한 직관의 중요성이다.
직관 또한 시간이 지나면서 발달하는 것이고, 직관을 발달시키기 위해서는 막막한 문제들을 해결하며 경험을 쌓아야 한다.
막막한 문제는 체계적으로 접근해야 한다.
다음은 체계적인 접근을 위한 질문들이다.
1. 비슷한 문제를 풀어본 적이 있던가?
- 비슷한 문제라도 알고리즘의 원리를 알지 못하면 적응이 힘드므로 완전히 이해하자.
2. 단순한 방법에서 시작할 수 있을까?
- 단순한 방법은 알고리즘 효율성의 기준선을 정해주는 효과가 있다.
3. 내가 문제를 푸는 과정을 수식화할 수 있을까?
- 손으로 여러 간단한 입력을 해보는 것이 답이 될 수 있다.
4. 문제를 단순화할 수 없을까?
- 주어진 문제의 좀더 쉬운 변형판을 먼저 풀어보자.
5. 그림으로 그려볼 수 있을까?
- 문제의 해법에 대한 직관을 얻을 수 있는 또 다른 방법은 문제에 관련된 그림을 그려 보는 것이다.
6. 수식으로 표현할 수 있을까?
- 수식을 전개하거나 축약하는 등의 순수한 수학적 조작이 문제를 해결하는 데 큰 도움을 줄 수 있다.
7. 문제를 분해할 수 있을까?
- 문제의 제약 조건을 분해하는 등의 더 다루기 쉬운 형태로 문제를 변형한다.
8. 뒤에서부터 생각해서 문제를 풀 수 있을까?
- 문제에 내재된 순서를 바꿔서 풀어본다.
9. 순서를 강제할 수있을까?
- 순서가 없는 문제에 순서를 강제해서 문제를 푸는 방법도 있다.
10. 특정 형태의 답만을 고려할 수 있을까?
- 순서를 강제하는 기법의 연장선으로 정규화 방법이 있다.
'정리 > 프로그래밍 대회에서 배우는 알고리즘문제 해결 전략' 카테고리의 다른 글
3. 코딩과 디버깅에 대하여 (0) | 2025.03.02 |
---|---|
1. 문제 해결과 프로그래밍 대회 (0) | 2025.02.27 |