문제 해결 개관
이 포스팅은 '프로그래밍 대회에서 배우는 알고리즘 문제해결전략(인사이트, 구종만 지음)'책을 읽고 쓴 것임을 밝힙니다.
문제를 해결하는 방법을 익히기 위해서는, 문제를 푸는것에 그치는 것이 아닌, 좀 더 깊은.. 문제 속을 들여다봐야 할 수 있어야 하는것 같다.
한가지 문제를 풀었다고 해서 다른 문제를 항상 풀 수 있는 것이 아니기 때문에..
'문제를 푸는 것'이 아니라 '문제를 푸는 기술'을 연마해야 한다.
우리의 선조들 뿐만 아니라 역사적으로 인간은 문제를 해결하면서 살아왔기 때문에, 문제를 해결했던 예전의 일들을 보면서 문제를 해결하는 방법(==기술)을 배우면 더 도움이 될 것 같다.
그래서 책에서는 '파인만 알고리즘'을 처음 보여준다. 이 알고리즘은 3단계로 되어 있다.
파인만이 누구인지는 검색해보도록 하자
문제를 해결하는 방법을 익히기 위해서는, 문제를 푸는것에 그치는 것이 아닌, 좀 더 깊은.. 문제 속을 들여다봐야 할 수 있어야 하는것 같다.
한가지 문제를 풀었다고 해서 다른 문제를 항상 풀 수 있는 것이 아니기 때문에..
'문제를 푸는 것'이 아니라 '문제를 푸는 기술'을 연마해야 한다.
우리의 선조들 뿐만 아니라 역사적으로 인간은 문제를 해결하면서 살아왔기 때문에, 문제를 해결했던 예전의 일들을 보면서 문제를 해결하는 방법(==기술)을 배우면 더 도움이 될 것 같다.
그래서 책에서는 '파인만 알고리즘'을 처음 보여준다. 이 알고리즘은 3단계로 되어 있다.
파인만이 누구인지는 검색해보도록 하자
- 칠판에 문제를 적는다.
- 골똘히 생각한다.
- 칠판에 답안을 적는다.
좀 감이 오는가? 여기서 느껴야 하는 것은 문제를 보기만 하지 않는다는 것. 문제를 적음과 동시에 어떻게 문제를 풀어야하는지 생각한다는 것이다.
이를 지나 좀 더 문제를 해결하기 위한 구체적인 방법을 제시한 '어떻게 문제를 풀 것인가(How to solve it)'에서는 다음과 같은 문제 해결방법을 제시했다.
- 문제를 이해한다.
- 어떻게 풀지 계획을 세운다.
- 계획을 수행해서 문제를 해결한다.
- 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.
좀 더 구체적으로 문제를 해결하는 방법이 된것을 볼 수 있다.
이를 토대로 우리도 문제를 해결해보자.
- 문제를 이해하는 것이다.
- 문제를 이해하기 위해서는 문제를 정확하게 읽고 이해해야 한다. 이를 제대로 못하면 시간만 낭비하는 꼴이 될 것이다. 문제를 정확하게 읽고 조건들을 모두 잘 체크하고, 이를 토대로 다음 단계로 넘어가야 한다.
- 어떻게 풀지 계획을 세운다.
- 문제를 이해함으로써 문제를 해결할 방법을 생각하고 그 방법에 관한 내용들을 정리하는 과정이다. 여기서 이해한 내용을 바탕으로 자료구조 및 알고리즘을 생각해내고, 문제를 푸는 과정의 시작부터 끝까지 정하는 것이다.
- 계획을 수행해서 문제를 해결한다.
- 2에서 수립한 계획을 수행하여 문제를 해결한다. 이 과정은 단순히 계획을 수행하면 된다고 생각할 수 있지만, 계획의 오류를 발견하는 순서이기도 하다. 따라서 계획을 수행하는 중 오류가 발생하면 다시 2번으로 가서 계획을 다시 짜야한다.
- 어떻게 풀었는지 돌아보고, 개선할 방법이 있는지 찾아본다.
- 문제를 잘 풀었다면, 이 문제를 해결한 방법을 잘 정리해놓고 다시 복기(뜻을 모르면 여기)를 하는게 좋다. 문제를 두번째 풀 때 우리는 더 많은 것을 배울 수 있는 기회를 가질 수 있다. 좀 더 효율적인 알고리즘을 찾거나 간결한 코드를 만들어내거나 할 수 있다. 그렇기 때문에 이 4번의 과정은 문제를 푸는것 이상으로 중요하다고 할 수 있다.
이렇게 문제를 해결하는 방법을 정리를 해봤는데, 이론적인것은 언제나 쉽다. 쉬울수밖에 없다. 왜냐면 읽는것뿐이니까..
다양한 알고리즘 문제를 풀기 위해서는 더욱 배워야 하고 배운것을 사용해야 하겠다.
나는 이를 토대로 문제를 풀어보기 시작해야겠다.
내가 가진 문제들도 이를 토대로 잘 풀어내었으면 좋겠다..!
댓글
댓글 쓰기