파인만 알고리즘.
- 칠판에 문제를 적는다.
- 골똘히 생각한다.
- 칠판에 답안을 적는다.
구종만 선생님께서 제시하신 문제해결과정.
- 문제를 읽고 이해하기백준 알고리즘을 풀면서 정말 많이 느낀 점이다. 입력과 출력 예시가 부족하다고 할 수도 있겠지만, 애초에 ‘문제’를 꼼꼼히 읽었다면 문제를 오해하는 일은 일어나지 않을 것이다.변수의 값, 시간 등 제약조건을 이해하기 위해선 알고리즘 시간복잡도, 공간복잡도 분석과 언어의 값 범위에 대한 이해가 선행되어야 한다.문제에서 나오는 개념이나, 지문에서 묻는 전반적인 요구조건과 제약조건을 일단 이해하자.
- 문제의 재정의와 추상화…자신이 다루기 쉬운 개념을 이용해서, 문제를 자신의 언어로 풀어 쓰는 것입니다. 이 과정은 문제가 요구하는 바를 직관적으로 이해하기 위해 꼭 필요합니다. 이 과정에서는 또 하나 중요한 일이 일어납니다. 바로 문제의 추상화입니다. 복잡한 현실 세계의 개념들속에서 어느 정도 현실의 본질만을 남겨두고 요약해서 다루기 쉽게 표현해야 합니다. 문제의 본질을 어떤 방식으로 재구성하느냐에 따라 같은 일을 하는 프로그램이라도 전혀 다른 문제로 받아들여질 수 있습니다. 실질적으로 추상화 과정이 프로그래밍이 나아갈 방향을 결정합니다.추상화가 일어나는 동안 문제에 대한 카테고라이징, 이전에 푼 문제들과 커넥션이 일어날거다. 내 생각엔 길게 봤을 때 이 순간이 문제해결에 가장 중요한 순간이다. 이건 어떤 원칙이 있는것도 아니고 경험과 직관이 전부라고 생각한다.
- ‘문제접근’을 위해 꼭 필요하다. 처음에 문제에 대한 파악이 제대로 되어있어야 제대로 된 답이 나올 수 있다. 수학문제를 풀 때 ‘문제속에 답이 있다’라는 말을 많이 들었는데 딱 여기에 똑같이 적용된다고 느낀다. 계획 세우기와 검증하기보통 얘기하는 ‘문제접근’ 과정이 이에 해당한다. 문제를 어떤 방식으로 해결할지 결정하고, 사용할 알고리즘과 자료구조를 선택한다.
- 계획 실행(구현) : 프로그램 작성.
- 회고 : 문제 해결에 당장 직접적인 영향은 없지만, 장기적으로 가장 큰 영향을 미치는 단계가 바로 회고입니다. 자신이 문제를 해결한 과정을 돌이켜 보고 개선하는 과정을 말합니다.효과적으로 회고를 수행하는 가장 좋은 방법은 문제를 풀 때마다 코드와 함께 자신의 경험을 기록으로 남기는 것입니다. 이때 문제의 간단한 해법과 함께 어떤 방식으로 접근했는지, 그리고 문제의 해법을 찾는 데 결정적이었던 깨달음은 무엇이었는지를 기록하면 좋습니다.또 다른 좋은 방법은 같은 문제를 해결한 다른 사람의 코드를 보는 것입니다. 반대로 한번에 맞추니 못한 경우에는 오답 원인도 꼭 적는 것이 좋습니다. 문제를 한번만 풀어서는 그 문제에서 배울 수 있는 것들을 다 배우지 못하는 경우가 더 많습니다.
이 내용 이후로 이 책에선 여러 알고리즘 문제와 그에 대한 구종만 선생님의 문제접근(계획 세우기와 검증), 계획 문제해결과정이 나온다. 3,4번에 대한 과정은 매 문제마다 충분히 알려준다. 그러나 2번과 5번, 문제의 재정의와 추상화, 회고는 오롯이 나 혼자서 해야 한다. 혼자 생각하는 그 힘든 과정만큼은 아무도 도와주지 않는다. 머리 아프더라도 의식적으로 하려고 노력해보자.
참고 : 알고리즘 문제해결전략 - 구종만
👋
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
B-tree와 B+tree (0) | 2023.03.03 |
---|---|
대표적인 선형 자료구조(스택, 큐, 덱) (0) | 2023.02.08 |
배열과 연결리스트 (0) | 2023.01.15 |
알고리즘 시간 복잡도 분석 (0) | 2023.01.03 |
추상 자료형과 알고리즘, 의사 코드 (0) | 2022.11.26 |