코딩테스트 공부를 하다 보면 문제를 푸는 것만큼 중요한 것이 “다시 풀 문제를 어떻게 관리할 것인가”라고 생각합니다. 처음에는 틀린 문제나 어려웠던 문제를 그냥 머릿속으로 기억하려고 했지만, 시간이 지나면 어떤 문제를 왜 어려워했는지 금방 잊어버렸습니다. 그래서 최근에는 코드트리의 북마크 기능을 활용해 문제를 단순히 저장하는 것이 아니라, 나만의 복습 폴더처럼 관리하려고 하고 있습니다.
코드트리는 여기에서 확인할 수 있습니다.
https://www.codetree.ai/
나만의 북마크 분류 기준
저는 북마크한 문제를 난이도만 기준으로 나누지 않습니다. 오히려 “내가 왜 이 문제를 다시 봐야 하는가”를 기준으로 분류하는 편입니다. 예를 들어, 한 번에 풀었지만 풀이가 지저분했던 문제, 접근법을 떠올리지 못했던 문제, 구현 실수가 반복된 문제, 개념 자체가 아직 불안한 문제를 따로 구분합니다.
제가 주로 사용하는 분류 기준은 다음과 같습니다.
첫 번째는 `개념 재확인`입니다. 알고리즘 개념은 알고 있었지만 문제를 보자마자 바로 적용하지 못한 경우에 넣습니다. 두 번째는 `구현 실수`입니다. 로직은 맞았는데 인덱스, 조건문, 자료구조 사용에서 실수한 문제를 모읍니다. 세 번째는 `접근법 복습`입니다. 해설을 보면 이해가 되지만, 처음부터 혼자 떠올리기는 어려웠던 문제를 넣습니다. 마지막은 `시험 전 재풀이`입니다. 실전 감각을 위해 시험이나 코딩테스트 전에 다시 풀어볼 가치가 있는 문제를 모아둡니다.
이렇게 나누면 북마크가 단순한 저장함이 아니라, 제 약점을 보여주는 학습 기록이 됩니다.

이번에 다시 본 문제: 트리 최적의 노드
이번 블로그 글에 사용한 사진은 코드트리의 `트리 최적의 노드` 문제입니다. 문제 설명을 보면 모든 간선의 길이가 1인 트리에서, 다른 모든 정점과의 거리 중 최댓값이 최소가 되는 노드를 구해야 합니다. 다시 말하면 어떤 노드를 골랐을 때 가장 먼 노드까지의 거리가 최대한 짧아지도록 하는 문제입니다.
처음 이 문제를 봤을 때는 단순히 모든 노드에서 DFS나 BFS를 돌려서 가장 먼 거리의 최솟값을 찾으면 된다고 생각했습니다. 하지만 그렇게 접근하면 노드 수가 커질 때 시간 복잡도가 커질 수 있습니다. 그래서 이 문제는 단순 탐색 문제가 아니라, 트리의 구조를 어떻게 해석할 것인지가 더 중요한 문제였습니다.
다시 풀면서 새롭게 깨달은 점은 “트리에서 중심이 되는 노드”를 찾는 관점입니다. 어떤 노드에서 가장 먼 노드까지의 거리를 최소화한다는 것은 결국 트리 전체의 지름과 중심을 생각해야 한다는 뜻이었습니다. 예전에는 문제 문장을 읽고 바로 코드부터 작성하려고 했지만, 이번에는 먼저 “이 조건이 트리에서 어떤 의미를 갖는가”를 해석하려고 했습니다. 그 과정에서 단순 구현보다 문제의 수학적 구조를 먼저 보는 습관이 조금씩 생기고 있다는 것을 느꼈습니다.
북마크를 다시 풀면서 내 것으로 만든 경험
북마크 문제를 다시 푸는 과정에서 가장 도움이 되는 것은, 예전에 틀렸던 이유를 다시 마주하게 된다는 점입니다. 처음 풀 때는 “아, 이건 어려운 문제구나” 정도로 넘어갔던 문제가, 다시 보면 “내가 트리의 지름 개념을 제대로 연결하지 못했구나”, “모든 노드에서 탐색하는 방식만 떠올렸구나”처럼 더 구체적인 약점으로 보입니다.
이 차이가 중요하다고 생각합니다. 단순히 많이 푸는 것만으로는 실력이 늘었다고 착각하기 쉽습니다. 하지만 북마크한 문제를 다시 풀어보면, 내가 정말로 이해했는지 바로 드러납니다. 해설을 보고 이해한 것과, 며칠 뒤 혼자 다시 풀 수 있는 것은 완전히 다른 문제였습니다.
이번 `트리 최적의 노드` 문제도 처음에는 직관이 부족했지만, 다시 보면서 “가장 먼 노드까지의 거리”라는 표현이 나오면 트리의 지름, 중심, 거리 계산을 함께 떠올려야 한다는 연결고리를 만들 수 있었습니다. 이것이 이번 주차에 가장 확실하게 내 것으로 만든 부분입니다.
코드트리 커리큘럼과 북마크로 만든 복습 루틴
저는 코드트리 커리큘럼을 따라가면서 새 문제를 푸는 시간과 북마크 문제를 다시 푸는 시간을 분리하려고 합니다. 새 문제를 푸는 시간에는 최대한 스스로 접근해 보고, 막히면 해설을 참고합니다. 그리고 그 문제를 완전히 이해하지 못했거나, 다시 풀 가치가 있다고 느껴지면 바로 북마크에 넣습니다.
복습할 때는 북마크 폴더를 기준으로 순서를 정합니다. 먼저 `구현 실수` 폴더에 있는 문제를 짧게 풀면서 손을 풉니다. 그다음 `개념 재확인` 문제를 풀며 알고리즘 개념을 다시 정리합니다. 마지막으로 `접근법 복습` 폴더의 문제를 풀면서 사고 과정을 훈련합니다.
이 루틴의 장점은 오늘 무엇을 공부해야 할지 고민하는 시간이 줄어든다는 점입니다. 예전에는 “오늘은 어떤 문제를 풀지?”를 고르는 데도 시간이 꽤 걸렸습니다. 하지만 북마크 폴더를 만들어두면, 그날의 컨디션과 목적에 맞춰 바로 복습할 수 있습니다. 시간이 많으면 어려운 접근법 문제를 풀고, 시간이 부족하면 구현 실수 문제를 빠르게 다시 보는 식으로 조절할 수 있습니다.
글을 마치며
코딩테스트 공부에서 북마크는 단순히 나중에 볼 문제를 저장하는 기능이 아니라, 나의 약점을 구조화하는 도구라고 생각합니다. 특히 코드트리처럼 커리큘럼이 잘 정리되어 있는 플랫폼에서는 새 문제 풀이와 북마크 복습을 함께 활용했을 때 학습 효율이 훨씬 좋아집니다.
이번 주차를 통해 느낀 점은, 좋은 복습 루틴은 의지력만으로 만들어지지 않는다는 것입니다. 내가 헷갈렸던 문제를 바로 저장하고, 왜 저장했는지 기준을 정하고, 다시 풀면서 약점을 확인하는 구조가 있어야 합니다. 앞으로도 코드트리의 커리큘럼과 북마크 기능을 활용해 단순히 문제 수를 늘리는 공부가 아니라, 틀린 문제를 확실히 내 것으로 만드는 공부를 이어가고 싶습니다.