정리와기록 블로그

문제 해결 방법론 (1) 본문

이론/Algorithm

문제 해결 방법론 (1)

뫂림 2020. 1. 16. 08:58

이번에는 문제 해결 방법론에 대해 다룬다. 여기서 문제 해결 방법론이란, 특정 문제에 대한 알고리즘이나 특정 풀이법이 아닌, 전반적인 알고리즘 문제를 대하는 자세/일반적 단계에 가깝다.

 

다음과 같은 단계로 문제를 해결해야 한다.

  1. 문제를 읽고 이해한다.
    - 중요하지만 가장 잘 놓치는 부분이라고 생각한다. 
    - 입출력만 보고 넘겨짚지 말고, 적어도 두 번 정독해서 요구하는 게 무엇인지 파악하자.

  2. 문제를 익숙한 용어로 재해석(재정의)한다.
    - 문제의 추상화 과정 -> 자신의 언어로 재해석하는 과정이다.
    - 추상화란, 문제 상황을 코드와 컴퓨터 언어로 변환시키는 작업이라고 볼 수 있다.

  3. 어떻게 해결할지 계획을 세운다.
    - 어떤 방식으로 해결할 지 결정한 뒤, 어떤 자료구조를 쓰고, 시간복잡도를 계산하는 부분이다.
    - 사실상 문제 해결에 있어서는 가장 중요하다고 볼 수 있다. 
  4. 계획을 검증한다.
    - 구현 전에 반드시 거쳐야하는 부분.
    - 우리가 정한 알고리즘이 모든 케이스에서 요구 조건을 충족하는지, 그리고 시간 복잡도나 메모리 이슈는 없는 지 확인하는 부분이다.
    - 귀납/귀류 등으로 알고리즘의 정당성을 검증한다.

  5. 프로그램으로 구현한다.
    - 구현력이 필수..!

  6. (맞다면) 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.
    - 연습자의 입장에서 당연히 해야 하지만 쉽게 놓치기 쉬운 부분이다.
    - 푼 문제에 대해 개선할 방법을 더 생각해보거나, 다른 사람의 코드와 비교해본다.
    - 오답도 정리해서 자주 반복되는 오답 원인이 무엇인지 체크한다.

이상, 종만북 2장의 일부 내용이었다. 처음 읽었을 때는 대충 넘어갔던 내용인데, 지금 보니까 처음부터 체계적으로 이렇게 연습하는 게 습관을 만들기에 좋다고 생각이 든다. 나의 상황을 진단하면.. 잘 되지 않는 부분은 다음과 같다.

  • 문제를 읽고 이해: 종종 대충 읽는다
  • 계획을 세우는 부분: 시간복잡도를 엄밀히 따지지는 않고, 다소 모호하고, 주관적일 때(알고리즘이 아닐 때) 키보드를 잡아버린다.
  • 계획을 검증하는 부분: 검증을 하지 않는다. 시간 복잡도 계산도 잘 하지 않는 것 같다.
  • 회고: 접근 및 배운점, 어려웠던 점은 기록하나, 다른 사람의 코드와 비교 그리고 오답 정리는 따로 하지 않음. 그리고 푼 문제 역시 다시 돌아보지 않는 듯..

모든 문제에 위 단계를 철저하게 지킬 필요는 없을 것 같지만, 초반에는 위 단게를 지켜야 나중에는 자동으로 머릿속에서 진행되지 않을까 싶다. 

'이론 > Algorithm' 카테고리의 다른 글

다익스트라 알고리즘  (0) 2020.03.02
이분 그래프 탐색 ([1707] 이분 그래프)  (0) 2020.03.02
유클리드 호제법  (0) 2020.02.27
시간복잡도 정리  (0) 2019.12.18
Comments