Post

글또 X 코드트리 알고리즘 챌린지 8주 완주 후기

들어가며

8주간의 코드트리 X 글또 챌린지가 종료되었다. 생각보다 8주라는 시간이 너무 금방 지나갔다. 이번 챌린지에서는 코딩테스트의 부담감을 내려놓고, 내 실력에 맞는 적절한 난이도의 문제를 풀어나가며 알고리즘 학습을 재미있게 할 수 있었다.

이번 글은 [첫 코드트리 리뷰](https://jeonje.github.io/posts/geultto-review

무엇이 달라졌을까?

8주간 코드트리 챌린지를 통해 가장 얻어가고 싶었던 것은 구현 역량 향상이었다. 이 목표를 이루기 위해 Notice Mid 레벨의 시뮬레이션과 완전탐색 문제들을 집중적으로 풀었다.

챌린지 시작 전 진행한 첫 진단평가에서는 시뮬레이션과 완전탐색 문제들을 풀지 못했지만, 적절한 난이도의 문제를 반복적으로 풀어나가면서 점차 익숙해졌고, 결국 하루에 2~3문제씩 해결할 수 있게 되었다. 이런 점진적인 성장이 가능했던 이유는 코드트리의 체계적인 난이도 설계와 상세한 해설 덕분이었다.

알고리즘 문제를 풀 때마다 항상 “이 문제는 이렇게 푸는 게 맞나?”라는 궁금증이 들곤 했다. 다른 알고리즘 플랫폼에서는 이런 궁금증을 해소하기 위해 검색을 하거나 다른 사람들의 제출 이력을 일일이 확인해야 하는 번거로움이 있었다. 그래서 대부분 정답을 맞추면 “아, 이렇게 푸는 게 맞구나”하고 다음 문제로 넘어곤 했다.

반면 코드트리는 문제 출제자의 해설이 제공되어 내 풀이와 바로 비교할 수 있었다. 이 과정속에서 단순히 문제를 해결하는 것을 넘어, 더 효율적인 접근 방식과 알고리즘 패턴을 배울 수 있었다. 문제를 스스로 푸는 것도 중요하지만, 내가 생각하지 못했던 접근법을 배우는 것또한 알고리즘 실력 향상에 많은 도움이 된다는 것을 느꼈다.

예로 A와 B를 더해 C보다 작으면서 최대가 되는 값을 구하는 문제에서 나는 다음과 같이 접근했다:

1
2
3
4
5
6
7
8
int maxSumValue = 0;
for(int i = 0; i <= 1000; i++) {
    for(int j = 0; j <= 1000; j++) {
        if(a * i + b * j <= c) {
            maxSumValue = Math.max(maxSumValue, a * i + b * j);
        }
    }
}

나의 풀이는 문제의 입력 조건을 활용한 간단한 접근법이다. 직관적이지만 시간복잡도가 O(1000²)로, 입력 데이터의 범위가 커지면 시간 초과가 발생할 수 있다

반면 코드트리 해설에서는:

1
2
3
for(int i = 0; i * a <= c; i++) {
   // 생략(저작권)
}

반복문의 종료 조건을 i * a <= c로 설정하여 불필요한 반복을 줄이고, 시간복잡도를 O(C/A)로 처리했다. 이를 통해 “for문의 종료 조건을 문제의 제약사항과 직접 연결하여 최적화할 수 있다”는 것을 배웠다.

또한 해설을 통해 내가 약했던 부분도 발견할 수 있었다. 그중 하나는 원형 구조에서의 최단 거리 계산이었다:

1
2
// n개 요소를 가진 원형 구조에서 a와 b 사이의 최단 거리
int minDistance = Math.min(Math.abs(b - a), n - Math.abs(b - a));

원형 구조에서는 두 지점 간의 거리가 시계 방향과 반시계 방향 중 더 짧은 쪽이 된다는 것, 그리고 반대 방향의 거리는 전체 크기 n에서 직선 거리를 빼면 된다는 간단하지만 중요한 개념을 명확히 이해하게 되었다.

이처럼 문제를 풀고 난 후 해설을 통해 부족한 부분을 보완받는 느낌이 들어 학습 효과가 더욱 컸다.

끝으로

알고리즘은 ‘어떻게 하면 꾸준히 할 수 있을까’가 항상 나의 고민이었다. 어려운 알고리즘 문제를 척척 풀어내는 사람들을 볼 때마다 “정말 대단하다”, “저런 사고력을 가졌으면 좋겠다”라는 생각과 함께 나도 그렇게 되고 싶다는 의욕이 마구 솟곤 했다. 그래서 의욕에 불타올라 알고리즘 공부를 다시 시작하지만, 어려운 문제에 부딪히면 금세 의욕이 꺾이고 결국 실무에 당장 필요한 기술 공부에 밀려 또다시 흐지부지되는 패턴이 반복되었다.

이번 글또 X 코드트리 챌린지는 그런 패턴을 깨는 계기가 되었다. 8주라는 정해진 기간 동안 꾸준히, 그리고 무엇보다 ‘재미있게’ 알고리즘을 공부할 수 있었다. 특히 수준에 맞는 문제들을 풀면서 작은 성취감을 느끼고, 문제 풀이를 통해 새로운 인사이트를 얻는 재미가 있었다. 이런 경험이 알고리즘 학습을 지속하는 원동력이 되었다.

이 과정에서 깨달은 가장 큰 인사이트는 적절한 난이도의 문제를 꾸준히 푸는 것의 중요성이다. 마치 운동을 시작할 때 무리하게 무게를 올리기보다 적절한 무게로 꾸준히 하는 것이 더 효과적인 것처럼, 알고리즘도 내 수준에 맞는 문제부터 차근차근 접근하는 것이 실력 향상에 더 도움이 된다는 것을 체감했다.

앞으로는 코드트리를 통해 두 가지 파트를 더 공부해보려고 한다. 첫 번째는 내가 가장 어려워하는 DP(동적 계획법)다. 항상 DP 문제만 나오면 머리가 하얘지곤 했는데, 체계적으로 문제 풀이를 연습해 볼 생각이다. 두 번째는 해커랭크에서 자주 출제되는 투 포인터 알고리즘이다. 이 두 영역을 보완하면 알고리즘 문제 해결 능력이 한층 더 성장할 것이라 기대한다.

무엇보다 이번 챌린지를 통해 내가 왜 알고리즘을 잘하고 싶은가에 대해 다시 생각해보게 되었다. 단순히 코딩테스트를 통과하기 위한 수단이 아니라, 개발자로서의 문제 해결 능력을 키우는 즐거운 시간으로 생각하며 앞으로도 꾸준히 학습해 나갈 계획이다.

This post is licensed under CC BY 4.0 by the author.