문제 해결 기법의 단계

지식 저장소·2021년 11월 23일
0

문제해결기법

목록 보기
1/21

모든 문제를 해결하기 위해서는 단계적으로 접근하는 것이 중요합니다. 단계적으로 접근해야 개선해야 할 점을 더 쉽게 찾을 수 있기 때문입니다.

  1. 문제를 읽고 이해한다.
  2. 문제를 익숙한 용어로 재정의한다.
  3. 어떻게 해결할지 계획을 세운다.
  4. 계획을 검증한다.
  5. 프로그램으로 구현한다.
  6. 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.

1단계: 문제를 읽고 이해하기

말하면 입이 아플 정도로 매우 중요합니다. 사소한 제약조건을 잘못 이해하면 문제를 잘못 해결할 수 있습니다.

2단계: 재정의와 추상화

자신이 생각하기 편하도록 재정의하고 추상화해야 직관력과 통찰력을 발휘하기 수월해집니다. 예를 들어 카드 문제와 맥주집 문제를 보겠습니다.

카드 문제

  • 사실: 모든 카드의 한쪽에는 알파벳, 다른 쪽에는 숫자
  • 주장: 만약, 한쪽이 D이면 반대쪽은 3
  • 문제: 주장이 사실인지 확인하기 위해 아래 카드 중 반드시 뒤집어봐야 하는 카드는 몇 개이고 어느 것인가?

맥주 문제

  • 규칙: 20세 이하인 사람은 맥주를 마실 수 없음
  • 문제: 나이 혹은 마시고 있는 것을 표시한 다음 4명 중 확인이 필요한 사람은 몇 명이고 누구인가?

아마 대다수의 사람들은 맥주 문제가 더 쉽다고 느낄 것이다. 이처럼 자신이 생각하기 편한 방식으로 재정의하고 추상화 하려면 추상화하는 방법을 훈련해야 합니다.

3단계: 계획 세우기

문제를 어떤 방식으로 해결할지 결정하고 사용할 알고리즘과 자료구조를 선택하는 단계입니다.

4단계: 계획 검증하기

계획을 세우면 곧장 코딩을 하면 안됩니다. 구현을 시작하기 전에 우리가 세운 계획이 모든 경우에 요구 조건을 만족하고 시간복잡도, 공간복잡도가 문제의 제한에 적합한지 확인해야 합니다.

5단계: 계획 수행하기

코딩하는 단계입니다.

6단계: 회고하기

문제 해결에 당장 직접적인 영향은 없지만 장기적으로 가장 큰 영향을 미치는 단계입니다. 문제를 한 번만 풀어서는 그 문제에서 배울 수 있는 것들을 다 배우지 못하는 경우가 많습니다. 만약 한 번에 맞추지 못한 경우 오답 원인을 기록하는 것이 좋습니다.

참고문헌: 구종만, 프로그래밍 대회에서 배우는 알고리즘 문제해결전략, 인사이트, (2012)

profile
그리디하게 살자.

0개의 댓글