정리와기록 블로그
문제 해결 방법론 (1) 본문
이번에는 문제 해결 방법론에 대해 다룬다. 여기서 문제 해결 방법론이란, 특정 문제에 대한 알고리즘이나 특정 풀이법이 아닌, 전반적인 알고리즘 문제를 대하는 자세/일반적 단계에 가깝다.
다음과 같은 단계로 문제를 해결해야 한다.
- 문제를 읽고 이해한다.
- 중요하지만 가장 잘 놓치는 부분이라고 생각한다.
- 입출력만 보고 넘겨짚지 말고, 적어도 두 번 정독해서 요구하는 게 무엇인지 파악하자. - 문제를 익숙한 용어로 재해석(재정의)한다.
- 문제의 추상화 과정 -> 자신의 언어로 재해석하는 과정이다.
- 추상화란, 문제 상황을 코드와 컴퓨터 언어로 변환시키는 작업이라고 볼 수 있다. - 어떻게 해결할지 계획을 세운다.
- 어떤 방식으로 해결할 지 결정한 뒤, 어떤 자료구조를 쓰고, 시간복잡도를 계산하는 부분이다.
- 사실상 문제 해결에 있어서는 가장 중요하다고 볼 수 있다. - 계획을 검증한다.
- 구현 전에 반드시 거쳐야하는 부분.
- 우리가 정한 알고리즘이 모든 케이스에서 요구 조건을 충족하는지, 그리고 시간 복잡도나 메모리 이슈는 없는 지 확인하는 부분이다.
- 귀납/귀류 등으로 알고리즘의 정당성을 검증한다. - 프로그램으로 구현한다.
- 구현력이 필수..! - (맞다면) 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.
- 연습자의 입장에서 당연히 해야 하지만 쉽게 놓치기 쉬운 부분이다.
- 푼 문제에 대해 개선할 방법을 더 생각해보거나, 다른 사람의 코드와 비교해본다.
- 오답도 정리해서 자주 반복되는 오답 원인이 무엇인지 체크한다.
이상, 종만북 2장의 일부 내용이었다. 처음 읽었을 때는 대충 넘어갔던 내용인데, 지금 보니까 처음부터 체계적으로 이렇게 연습하는 게 습관을 만들기에 좋다고 생각이 든다. 나의 상황을 진단하면.. 잘 되지 않는 부분은 다음과 같다.
- 문제를 읽고 이해: 종종 대충 읽는다
- 계획을 세우는 부분: 시간복잡도를 엄밀히 따지지는 않고, 다소 모호하고, 주관적일 때(알고리즘이 아닐 때) 키보드를 잡아버린다.
- 계획을 검증하는 부분: 검증을 하지 않는다. 시간 복잡도 계산도 잘 하지 않는 것 같다.
- 회고: 접근 및 배운점, 어려웠던 점은 기록하나, 다른 사람의 코드와 비교 그리고 오답 정리는 따로 하지 않음. 그리고 푼 문제 역시 다시 돌아보지 않는 듯..
모든 문제에 위 단계를 철저하게 지킬 필요는 없을 것 같지만, 초반에는 위 단게를 지켜야 나중에는 자동으로 머릿속에서 진행되지 않을까 싶다.
'이론 > Algorithm' 카테고리의 다른 글
다익스트라 알고리즘 (0) | 2020.03.02 |
---|---|
이분 그래프 탐색 ([1707] 이분 그래프) (0) | 2020.03.02 |
유클리드 호제법 (0) | 2020.02.27 |
시간복잡도 정리 (0) | 2019.12.18 |
Comments