계기
내가 본격적으로 웹 개발을 접하게 된 건 작년 봄이었지만, 그때는 아무것도 모르는 말 그대로 '백지' 상태였다. 그 상태에서 여름에 프로젝트를 진행하려고 하는데, 기본적인 개념이 잡혀있지 않으니 당연히 제대로 서비스가 완성될 리는 없었다. 당연히 나의 첫 프로젝트는 흐지부지 되었고, 그 과정에서 많은 감정들을 느낄 수 있었다.
그 감정들 중에서 가장 패착이라고 여긴 부분은 바로 '언어에 대한 미숙함'이었다. 백엔드 개발을 희망하는 사람이 기본적인 자바 문법에 대한 이해도가 전혀 없으니 당연히 제대로 된 프로젝트를 진행할 수는 없었다. 프로젝트를 통해 언어를 배우면 된다고들 하였지만, 나한테 해당 방식은 맞지 않았고, 그러던 중 '알고리즘' 문제풀이를 통해 문법을 빠르게 익힐 수 있다는 친구의 조언을 듣고, 무작정 시작하게 되었다.
알고리즘의 시작
처음에는 가장 쉬운 문제인 'Hello World'도 여러 번 시도 끝에 성공할 정도로 애를 먹었던 기억이 난다. 하지만 나 자신이 스스로 부족한 것을 알고 있었기에, 하루에 한 문제만 꾸준히 풀어보자는 다소 소박한 목표를 가지고 알고리즘 공부를 시작했다.
그러나 막상 알고리즘을 시작하니, 상상 이상으로 재밌게 느껴졌다. 기초적인 문법을 터득하게 되니, 문제들을 하나씩 풀어 나가는 과정이 즐겁게 느껴질 정도로 하루에 밥 먹고 씻는 시간을 제외하면 알고리즘 공부에 몰두하게 된 것이다. 이때부터는 알고리즘을 '공부'가 아닌 '게임'으로 여기기 시작했다. 마치 롤의 랭크 티어를 올리듯이, 백준의 티어를 올리는 데 심취해 가능한 많은 문제를 풀려고 했으며, 심지어는 하루에 20문제 가까이 푸는 날도 생기곤 하였다.
알고리즘의 본질
그러나 눈에 보이는 랭크와 문제 풀이수에 집착한 까닭일까, 가장 중요한 본질을 놓치고 있다는 것을 뒤늦게 깨달았다. 우리가 알고리즘을 풀다 보면 비슷한 유형의 문제들을 접하게 되는데, 해당 문제들은 대부분 공통적인 개념과 접근 방식을 알고 있으면 수월하게 풀 수 있다.
어느 날 특정 유형의 문제가 풀리지 않아 바로 전날에 해결한 비슷한 유형의 문제를 복기하면서 접근 방식을 찾아내고자 했는데, 내가 해당 문제를 도대체 어떤 생각으로 해결했는지 도저히 생각이 나지 않는 것이다. 그것도 바로 전날에 해결한 문제를..! 이제 그때부터 회의감이 들기 시작했다.
'과연 단순한 문제 풀이수에 집착하는 것이 맞는 건가?'
지금까지는 단순한 언어의 학습을 위해 알고리즘 풀어왔다면, 이제 어느 정도 언어에 대한 기본적인 이해도가 생긴 지금은 어떠한 방식으로 알고리즘을 학습해야 할지 도저히 감히 잡히지 않았다.
머리는 생각하는 곳
그렇게 고민하다가, 나보다 먼저 알고리즘 공부를 시작하고 있던 원석이한테 이러한 나의 고민을 털어놓았다. 그러자 원석이는 자기 친구들이 알고리즘을 학습하는 방법을 나한테 보여주면서, 나보고 이렇게 해보는 것이 어떻겠냐고 물어보았다. 그리고 그 방법은 바로 '기록'이었다.
모두들 블로그나 노션 등 각자만의 수단을 통해 자신이 지금까지 풀어온 알고리즘 문제들을 기록해나가고 있던 것이다. 기록하는 과정에서 자신이 사용한 개념, 접근 방식, 시행착오 등 다양한 개념들을 정리함과 동시에 복습하고 있었고, 이를 통해 자신만의 접근법과 풀이 방식을 점검하고 발전시키고 있는 것이었다.
머리를 한 대 얻어맞은 기분이었다. 왜 지금까지 해당 방식으로 문제를 풀고 있지 않았는지 나 자신이 바보 같을 따름이었다. 그러나 지금까지 푼 문제들에 대해 모든 회고 과정을 작성하는 것은 시간적으로 불가능하였고, 나는 그 순간부터 풀어나가는 모든 문제들에 대해 나만의 방식으로 기록을 노션에 시작하기 시작했다.
기록의 시작과 그 방법
노션의 데이터베이스를 통해 문제의 링크, 이름, 풀이 날짜, 종류 등 핵심적인 정보를 한눈에 알아볼 수 있도록 하였고, 각 문제마다 할당된 페이지를 통해 풀이 과정과 접근 방식을 적어 나갔다.
구현 방식
우선 나만의 구현 방식을 적어 나갔다. 처음 문제를 풀어나갈 때 내가 어떤 방식으로 접근하고 어떻게 생각했는지를 중점으로 작성하였고, 만약 해당 방식이 틀리면 재시도할 때마다 구현 방식을 계속해서 작성해 나갔다.
개선점
알고리즘에서 정답을 맞혔다고 해서 넘어가는 것은 매우 좋지 않다. 정답을 도출해 내는 데에는 여러 가지 방법이 존재하며, 그 방법들 중 내 방법이 최선일 것이라는 보장이 없기 때문이다.
따라서 문제를 푼 이후, 각종 블로그 및 백준의 상위권 답변들을 참고하여 내 풀이 방식 및 접근 방식에서 개선될 부분이 있는지를 항상 찾아내려고 노력했고, 이를 적용하고 기록함으로써 체화하여 답안을 개선하려고 노력하였다.
배운 점&주의사항
이때 난 인프런에서 알고리즘 강의를 듣고 있었는데, 로드맵도 물론 좋았지만, 문제를 접근하는 체계적인 방식을 제공해 준다는 것이 무척 효과적이었다. 그리고 푼 문제의 강의를 들으며, 강사님의 풀이와 내 풀이를 비교하여 배울 점을 기록하고, 해당 류의 문제에서 주의해야 할 점들을 기록하곤 하였다.
마무리
위의 과정은 단순히 기록하는 것 그 이상의 의미를 지녔다. 문제풀이 과정에서 사용했던 개념과 접근 방식, 그리고 시행착오 등을 체계적으로 정리하고 복습함으로써, 단순히 문제 한두 개를 푸는 것을 넘어 독자적인 접근 방식과 사고 과정을 점검하고 개선해 나갈 수 있었다. 궁극적으로 기록은 어느 순간 갑자기 떠오르는 아이디어에 의존하기보다는, 체계적인 방법을 통해 문제를 효율적으로 해결해 나갈 수 있도록 만들어주었다.
이를 통해 문제 풀이에 대한 자신감이 붙고, 동일하거나 유사한 유형의 문제를 다시 접했을 때도 나만의 접근 방식을 통해 빠르고 정확하게 해결할 수 있었다. 결국, 단순히 많은 문제를 푸는 것보다 ‘어떻게 풀었는지’를 정리하고, 다양한 시각으로 접근 방식을 확장해 보는 과정이 훨씬 중요하다는 사실을 깨닫게 된 것이다.
비록 지금은 여러 프로젝트를 진행하느라 알고리즘을 등한시하고 있지만, 신년부터는 초심을 찾고 이틀에 한 문제는 꼭 푸는 것을 목표로 하고자 한다.
'회고' 카테고리의 다른 글
2024년 총망라, 그리고 신년을 대하는 마음가짐 (2) | 2024.12.31 |
---|---|
주삼끄 챌린지를 마무리하며 (2) | 2024.12.28 |
[동아리] Leets 4기를 리드로 마무리하며 (2) | 2024.12.17 |
[컨퍼런스] 남궁성의 취업 세미나 주관 회고 (1) | 2024.12.03 |
[일상] 2024년 중간 회고 - 새학기부터 휴학까지 (12) | 2024.11.09 |