티스토리 뷰

이 글은 종만북 2장 대해 다루겠습니다. 전체적인 내용은 종만북 정리하였으나 제 개인적인 경험 및 추측이 포함되어 있습니다. 내용 상의 오류가 있을 수 있으니 발견 시 댓글로 꼭 말씀해주세요! 시작해볼까요?

문제 해결 과정

1단계 : 문제를 읽고 이해하기

많은 대회 참가자들이 가장 많이 하는 실수는 문제를 잘못 읽는 것이라고 합니다. 따라서 문제 설명을 공격적으로 읽으며 문제가 원하는 바를 완전히 이해하는 과정이 반드시 필요합니다. 저 같은 경우만 해도 문제를 잘못 읽어 코드를 처음부터 짠 경험이 한 두번이 아닙니다.

 

2단계 : 재정의와 추상화

재정의는 쉽게 말해 자신의 언어로 문제를 이해하는 것이고 추상화는 현실의 문제를 수학적/전산학적 개념으로 옮겨 표현하는 과정입니다. 가만히 생각해보면 우리는 문제를 풀 때 항상 추상화를 하죠? 가령 카카오2020 인턴 1번 문제의 경우 전 경로 찾기로 문제를 추상화 했죠. 다른 사람은 BFS가 아닌 다른 방법으로 풀었을 수도 있습니다. 그러면 사람마다 추상화를 한 방법이 다른 것이고, 이 추상화한 결과에 따라 문제 풀이의 방식이 달라지므로 전혀 다른 문제로 인식될 수 있습니다. 그래서 이 추상화 과정이 프로그래밍의 방향성을 결정한다고 볼 수 있습니다.

 

3단계 : 계획 세우기

전 이 부분을 읽으며 많이 반성했던 것이 2단계 까지는 지키는 것 같은데, 계획 세우기와 검증의 단계를 거치지 않고 바로 수행을 해왔기 때문입니다. 계획을 세우는 단계에서는 문제를 어떤 방식으로 해결할지 결정하고, 사용할 알고리즘과 자료구조를 선택합니다. 아마 고난이도의 문제를 풀어야 할 수록 중요한 단계가 되겠죠?

 

4단계 : 계획 검증하기

계획의 검증 단계에서는 총 3가지를 확인해야 합니다. 1) 계획이 요구 조건들을 정확히 수행하는가 2) 얼마나 걸리는가 3) 메모리를 얼마나 사용하는가. 이 3가지가 모두 문제가 제시한 범위 내에서 작동해야 합니다.

 

5단계 : 계획 수행하기

6단계 : 회고하기

장기적으로 보았을 때 큰 도움이 되는 부분이 이 '회고하기' 단계라고 합니다. 풀어본 문제라도 다시 풀어보아야 하는 이유는 다시 풀 때 더 간결한 코드를 작성한다거나 더 효율적인 알고리즘을 쓸 수 있고, 같은 알고리즘을 쓰더라도 더 직관적인 방법을 찾을 수도 있기 때문입니다. 효과적인 회고의 방법은 문제를 풀 때마다 코드와 함께 자신의 경험을 기록으로 남기는 것입니다. 이 책 때문인가요, 그렇게 많은 알고리즘 해결 블로거들이 있는게?ㅋㅋㅋ 이때 그냥 코드만 올리는 것이 아니라, 간단한 해법, 접근 방법 그리고 문제의 해법을 찾는 데 결정적이었던 깨달음도 함께 적으면 더 좋습니다. 

만약 한 번에 해결하지 못한 문제가 있다면 오답 원인도 꼭 적는 것이 좋습니다. 자신의 약점을 파악하여 앞으로의 실수를 줄이기 위함입니다.

또 다른 좋은 방법은 같은 문제를 다른 사람들은 어떻게 해결했는지, 다른 사람들의 코드를 보는 것입니다. 물론 타인의 코드를 읽고 이해하는 것이 쉽지는 않지만, 새로운 관점을 읽었을 때 나는 생각치 못한 통찰을 얻을 수도 있습니다.

문제 해결 전략

앞으로 제시 될 문제 해결 전략은 문제를 못 풀 때 다양한 방법을 취하며 답안을 구하기 위해 사용하면 됩니다. 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함