※ 구종만 저자님의 『알고리즘 문제 해결 전략』에서 발췌한 내용입니다.
기본적인 문제 해결 과정
1. 문제를 읽고 이해한다.
2. 문제를 익숙한 용어로 재정의한다.
3. 어떻게 해결할지 계획을 세운다.
4. 계획을 검증한다.
5. 프로그램으로 구현한다.
6. 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.
1. 문제를 읽고 이해하기
문제 설명을 공격적으로 읽으며 문제가 원하는 바를 완전히 이해하는 것이 중요하다.
사소한 제약 조건을 잘못 이해하면 풀 수 없는 문제들이 흔하다.
2. 재정의와 추상화
자신이 다루기 쉬운 개념을 이용하여 문제를 자신의 언어로 풀어쓰는 것.
복잡한 문제일 수록 그 중요성이 커진다.
문제의 추상화
어느정도의 본질만 남겨두고 축약하여 다루기 쉽게 표현해야 한다.
어떤 부분을 추상화할 지를 선택하는 작업과 문제를 재정의 하는 방법들에 대한 고찰을 해야한다.
3. 계획 세우기
사용할 알고리즘과 자료 구조를 선택한다.
문제를 보고 어떻게 해결해야 할지 모르겠는 경우 이 과정에서 가장 많은 고민을 하게 된다.
4. 계획 검증하기
구현을 시작하기 전에 계획을 검증하는 과정을 거쳐야 한다.
설계한 알고리즘이 모든 경우에 요구 조건을 정확히 수행하는지 증명하고, 수행에 걸리는 시간과 사용하는 메모리가 문제의 제한 내에 들어가는지 확인해야 한다.
5. 계획 수행하기
프로그램을 작성한다.
6. 회고하기
문제 해결에 당장 직접적인 영향은 없지만, 장기적으로 가장 큰 영향을 미치는 단계.
문제 해결 기술을 어떻게 사용하고 있는지 돌아보고 개선해야 한다.
회고를 수행하는 효과적인 방법
문제를 풀 때마다 코드와 함께 자신의 경험을 기록으로 남기는 것이다.
기록할 내용: 문제의 간단한 해법, 접근 방식, 문제의 해법을 찾는 데 결정적인 깨달음.
+ 한 번에 맞추지 못한 경우 오답의 원인도 기록하는 것이 좋다.
기록의 쓸모: 그 때 무엇을 배웠는지, 기록한 문제들 간의 공통으로 필요한 통찰들이 패턴화되기도 한다.
같은 문제를 푼 다른 사람의 코드를 보는 것도 중요하다.
+ 그룹 스터디나 인터넷을 통해 다른 사람과 함께 공부하는 것이 중요하다.
문제를 풀지 못했을 때
일정 시간이 지나도록 고민해도 답을 찾지 못할 때는 다른 사람의 소스 코드나 풀이를 참조한다는 원칙을 세우는 것이 중요하다.
단, 반드시 복기를 동반해야 한다.
자신이 문제를 해결할 때 취했던 접근들을 되돌아보고 이 풀이를 떠올리지 못했는지를 살펴보아야 한다.
향후 목표
바킹독님의 알고리즘 강의에 따라 알고리즘 문제를 여럿 풀어보고 코딩 테스트를 무작정 보았는데... 그저 처참한 결과만이.
이 알고리즘으로 풀면 될 것 같은데? 하는 직감에 의한 문제풀이, 문제의 요구사항을 제대로 읽지 않아 틀리는 경우, 혹은 시간 초과 등등..
종만북 열심히 읽고 문제를 제대로 풀고 제대로 된 회고하면서 쭉쭉 나아가보려구요 :)
더 나은 프로그래머가 되기 위해 전진전진.