개관
- 지식을 진정 자신의 것으로 만들어 활용할 수 있기 위해서는 학문이 발전하는 과정에서 일어난 발견과 깨달음을 학생 자신이 되짚어갈 수 있어야 한다.
1장 문제해결과 프로그래밍 대회
프로그래밍은 문제 해결이다
- 프로그래머가 사용하는 언어나 라이브러리, 알고리즘에 대한 지식들이 퍼즐의 조각이라면 문제 해결 능력은 적재적소에 퍼즐 조각을 배치하고 이들을 연결해서 큰 그림을 만드는 능력이라고 할 수 있다.
2장 문제 해결 개관
도입
- 이 수련의 목표는 문제를 푸는 것이 아니라
문제를 푸는 기술을 연마
하는 것 → 자신이 문제를 어떤 방식으로 해결 하는지를 의식하고 어느 부분이 부족한지, 어떤 부분을 개선해야 할지 파악해야함.
문제 해결 과정
- 파인만 알고리즘
- 칠판에 문제를 적는다.
- 골똘히 생각한다.
- 칠판에 답안을 적는다.
- 위 알고리즘에서 배울점
- 해결과정을 단계 별로 나눈점
- 문제를 적는 단계가 있다는 점
- 어떻게 문제를 풀것인가(How to Solve It)에서 말하는 문제 해결 과정
- 문제를 이해한다.
- 어떻게 풀지 계획을 세운다.
- 계획을 수행해서 문제를 해결한다.
- 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.
- 위 두 방법을 합치면
- 문제를 읽고 이해하기
- 급하다고 빨리 읽으면 안됌.
- 실수하기 제일 좋은 단계
- 재정의와 추상화
- 문제를 자신의 언어로 풀어쓰기.
- 현실 세계를 다루기 위해서는 어느 정도
현실의 본질만을 남겨두고 축약
하여 다루기 쉽게 표현해야함.
- 계획 세우기
- 문제를
어떻게 해결할지 계획
을 세우는 것
- 사용할
알고리즘
과 자료구조
선택
- 가장 중요한 단계
- 계획 검증하기
- 구현을 시작하기 전에 계획을 검증하는 과정을 거치기
- 요구조건 정확히 수행하는지 증, 시관과 메모리제한 확인하기
- 계획 수행하기
- 프로그램을 작성하는 단계
- 회고하기
장기적으로 가장 큰 영향
을 미치는 단계
- 문제해결한 과정을 돌이켜 보고 개선하는 과정
- 효과적인 회고방법 → 문제를 풀때마다 코드와함께 자신의 경험을 기록으로 남기는 것
- 간단한 해법
- 어떤방식으로 접근을 했나?
- 결정적이었던 깨달음
- 오답노트 → 오답의 원인을 적어보자
- 같은 문제를 해결한 다른 사람의 코드를 보자
- 초보일때는 일정 시간이 지나도록 고민해도 답을 찾지 못하면 다른 사람의 코드나 풀이를 참조한다는 원칙을 세우자( 단 다른 사람의 소스 코드나 풀이를 참조할 때는 반드시 복기를 동반해야한다!)
문제 해결 전략
직관과 체계적인 접근
체계적인 접근을 위한 질문들