-
알고리즘, 문제 해결 전략부터Problem Solving 2020. 4. 22. 00:52
개발자들에게 있어서 알고리즘은 언젠가는 정복해야할, 그리고 같이 가야 할 존재인 것 같습니다.
저는 안드로이드 개발을 주로 하고 있는데 그동안 알고리즘에 대한 필요성을 잘 못느끼고 있었습니다.
하지만, 언젠가 코딩 테스트를 위해서 알고리즘이 필요할 것이라고 막연하게 생각하고는 있었죠.
그리고 최근 코딩 테스트를 위해 알고리즘에 대해 공부할 기회가 생겼습니다.
그래서 앞으로 알고리즘과 관련한 포스팅을 주로 해보려고 합니다.
알고리즘을 어떻게 공부해야할지 막연한 찰나에
이 책을 발견했습니다.
프로그래밍 대회에서 배우는 알고리즘 문제해결전략
이제 막 읽기 시작했지만 단순히 자료구조나 알고리즘에 대한 배경지식 설명이 아니라,
오히려 알고리즘과 문제에 대해서 어떻게 접근해야할지에 대해 알려주는 책이었습니다.
저 역시 그간 몇번 문제를 풀면서 어떻게 문제에 대해 접근하는 것이 맞는지 고민이 많았습니다.
문제를 보자마자 바로 코딩을 하다보니 잘 해결이 안되고 이 방법이 아닌 것 같다는 생각이 있었거든요.
그럼 이 책의 문제 해결 과정에 대해서 알아보겠습니다.
1단계, 문제를 읽고 이해하기
문제 해결 알고리즘의 첫 번째 단계는 문제를 읽고 이해하는 것입니다.
저 역시 그간 문제에 접근할 때 깊게 생각하지 않고 바로 뛰어드는 경우가 많았었는데요, 제약 사항들을 깊게 고민하지 않다보니
테스트 할 때가 되서야 제약 사항을 놓친 것을 알곤 했습니다.
이처럼 문제를 읽고 이해하는 것이 제대로 되야 추후 문제를 해결하기 위한 과정도 순탄하다고 볼 수 있습니다.
2단계, 재정의와 추상화
두번째 단계는 자신이 다루기 쉬운 개념을 이용해서, 문제를 자신의 언어로 풀어 쓰는 것입니다.
문제가 요구하는 바를 자신의 관점으로 이해하고 직관적인 문제로 만드는 것이라고 볼 수 있는데요,
복잡한 문제일수록 더 단순화시키고 본질을 찾아 본질을 해결하기 위한 접근이 필요하다고 볼 수 있습니다.
3단계, 계획 세우기
세번째 단계는 문제를 어떻게 해결할지 계획을 세우는 것입니다. 이 단계에서 본격적으로 사용할 알고리즘과 자료구조를 선택합니다.
저는 그간 어떻게 접근할지 계획을 세우려고 했었지만, 다각도에서 알고리즘과 자료구조를 고려하지 않았던 것 같습니다.
이 과정에서 많은 고민을 해보면서 자료구조와 알고리즘을 선택해야하는 것 같습니다.
4단계, 계획 검증하기
계획을 세우면 바로 코딩을 하는 것이 아니라, 계획을 검증하는 과정을 거쳐야 합니다.
이 계획이 문제가 요구하는 요구 조건에 부합하는지 확인해야하고, 시간 복잡도와 공간 복잡도를 고려해서
적절한 알고리즘이 맞는지 확인해야만 합니다.
5단계, 계획 수행하기
계획이 검증되면 이제 프로그램을 작성하는 과정을 거칩니다.
이 단계에서 얼마나 좋은 코드를 짜는지가 중요한데요, 특히 본인이 사용하는 언어에 대한 능숙도가 중요하다고 볼 수 있습니다.
6단계, 회고하기
문제 해결 과정에 직접적이진 않지만 장기적인 관점에서 보면 가장 중요한 과정이라고 볼 수 있습니다.
회고란 자신이 문제를 해결한 과정을 돌이켜 보고 개선하는 과정을 말합니다.
저자는 회고를 하는 법에 대해서 많이 언급했는데요, 문제를 풀 때마다 자신의 경험을 기록으로 남기는 부분이 인상깊었습니다.
앞으로 블로그 포스팅하는 방향에도 많은 도움이 될 것 같네요.
결론
단순히 많은 배경지식을 외우고 많은 문제들을 풀고 외운다고 해서 근본적인 문제 해결 능력이 키워지는 것이 아닌 것 같습니다.
올바른 접근 방향을 가지고 문제 해결을 함으로써 문제 해결 능력을 꾸준히 키워나가려고 합니다.
'Problem Solving' 카테고리의 다른 글
백준 14890번(Java) 경사로 (0) 2021.06.04 백준 14891번, 톱니바퀴 (0) 2021.05.01 백준 1260, DFS와 BFS (0) 2020.04.26 프로그래머스 Level2 - 탑 (0) 2020.04.24 백준 10828번, 스택 자바로 구현 (0) 2020.04.22