티스토리 뷰
- 문제를 읽고 이해한다
- 문제를 익숙한 용어로 재정의한다
- 어떻게 해결할지 계획을 세운다.
- 계획을 검증한다.
- 프로그램으로 구현한다
- 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.
1. 문제를 읽고 이해한다.
문제를 읽고 이해하는 것은 생각보다 많이 중요하다. 시간에 쫒겨 문제를 보다보면 분명 잘못이해한부분이나 사소한 제약조건을 잘못 이해 할 수 있따. 따라서 문제 설명을 공격적으로 읽으며 문제가 원하는 바를 완전히 이해하는 과정이 반드시 필요합니다.
2. 재정의와 추상화
자신이 다루기 쉬운 개념을 이용해서 문제를 자신의 언어로 풀어 쓰는것입니다. 문제가 요구하는 바를 직관적으로 이해하기 위해 꼭 필요하며 복잡한 문제일 수록 재정의와 추상화가 중요합니다. 문제의 본질을 어떻게 재구성한냐에 따라 같은 일을 프로그램도 전혀 다른 문제로 받아들여 질 수 있습니다. 어떤 부분을 추상화 할 것인지 어떤 문제를 재정의 할 것인지 그것을 생각해야 합니다.
3. 계획 세우기
이제 문제를 어떻게 해결할지 계획을 세우는 것입니다. 사용할 알고리즘과 자료구조를 선택합니다. 사실상 이부분이 제일 중요한부분! 자신이 알고있는 자료구조나 알고리즘을 직접 적용하면 너무나도 간단한 문제입니다. 하지만 문제를 보고 어떻게 해결해야 할지 모르겠다면 정말 많은 고민을 할텐데요 여기서 고민을 조금 도와줄 여러 전략들이 있습니다.
< 2,3절 어떻게 풀어야 될지 모를때 사용 !?>
4. 계획 검증하기
계획을 세웠다고 곧장 코딩하는것이 아니라 구현을 하기전에 계획을 검증하는 과정을 거쳐야합니다. 모든 요구 조건을 정확히 수행하는지 증명하고 수행에 걸리는 시간과 메모리가 문제의 제한 내에 들어가는지 확인해야 합니다.
<4,5장 효율성, 정당성>
5. 계획 수행하기
코딩하면됩니다.
6. 회고하기
장기적으로 큰영향을 미치는 부분 내가 해결한 과정을 돌이켜보고 개선하는 과정 문제를 최소 2번은 봐야합니다. 회고를 수행하는 가장 좋은 방법은 문제를 풀 때마다 코드와 함께 자신의 경험을 기록으로 남기는 것입니다.
기록은 간단한 해법, 접근방식, 해결하는데있어 결정적 깨달음이 있습니다. 맞추지 못한 경우도 오답 원인도 꼭 적는것이 좋습니다. 오답 노트를 적다보면 자주 틀리는 부분을 알게되고 결과적으로 실수를 줄일수가 있습니다. 회고를 위한 또다른방법은 다른사람의 코드를 보는것입니다.
문제를 못풀때는 기준을 정해서 다른사람의 답을 보는것도 중요 (너무 한문제에 매달릴필요는 없다)
저의 기준은 문제당 3시간을 넘기지 않는것입니다. 답을 보면서 내가 취했던 접근을 되새겨보고 왜 이 풀이를 떠올리지 못했는지 살펴봐야합니다.
사실 이 모든 과정을 모두 따라야 되는 것은 아닙니다.. 제가 생각했을 때는 1,2,3을 한묶음으로 보고 4를 한뒤 코딩 한후 6으로 회고를 하면 좋을것 같습니다.
<2.3절 문제해결 전략>
- 직관과 체계적인 접근
- 비슷한 문제를 풀었던 적이 있는가?