New Update: 백준이 사라졌다..
백준이 사라진 이후, 알고리즘 RAG 프로젝트의 방향성을 다시 고민하게 되었습니다.
백준이 사라지고 난 뒤, 기존 프로젝트를 어떻게 가져가야 할지 고민이 많았습니다.
원래 이 프로젝트는 단순한 “문제 추천기”에 가까웠습니다.
제가 백준에서 문제를 풀고, 공부한 내용을 개인 블로그(MDX)에 정리하면 GitHub Actions가 자동으로 트리거됩니다. 이후 미리 구축해둔 LeetCode 문제 벡터 인덱스(RAG)를 기반으로 OpenAI API가 유사한 문제를 검색하고, 가장 비슷한 문제 3개를 개인 Slack으로 보내주는 형태였습니다.
전체 흐름은 아래와 같았습니다.
Baekjoon 문제 풀이
→ 블로그(MDX) 업로드
→ GitHub Actions 실행
→ OpenAI Embedding 생성
→ NumPy 기반 LeetCode RAG 검색
→ GPT-4o-mini 추천 이유 생성
→ Slack 개인 알림 전송
당시에는 “한국어 백준 풀이 기록을 기반으로 영어 LeetCode 문제를 추천한다”는 점이 꽤 흥미로운 개인 프로젝트라고 생각했습니다.
실제로:
- GitHub Actions 자동화
- Docker heavy/light 분리
- NumPy 기반 벡터 검색
- Slack 자동 알림
- OpenAI Embedding 기반 Retrieval
- LangSmith 추적
등 여러 요소들을 실험해볼 수 있었고, 개인적으로도 알고리즘 복습에 꽤 도움이 되었습니다.
백준의 서비스 종료
백준이 사라진 이후로는 더 이상 “백준 → LeetCode”로 이어지는 학습 흐름이 존재하지 않게 되었습니다.
현재는 LeetCode에서 직접 문제를 풀고 있기 때문에, 단순히 “유사한 LeetCode 문제 추천” 자체는 이전만큼 의미가 없어졌습니다.
예전에는:
- 백준에서 특정 알고리즘 패턴을 학습하고
- LeetCode 스타일 문제로 확장 학습
하는 흐름이 자연스러웠습니다.
하지만 이제는 처음부터 LeetCode에서 문제를 풀고 있기 때문에:
“이미 LeetCode를 푸는 사람에게 또 LeetCode 문제를 추천하는 것” 은 학습 측면에서 임팩트가 크지 않았습니다.
그래서 프로젝트 방향 자체를 다시 고민하게 되었습니다.
알고리즘 학습에서 중요한 것
생각해보면, 알고리즘 공부에서 가장 어려운 부분은 단순히 “다음 문제를 찾는 것”이 아니었습니다.
오히려 어려웠던 건:
- 내가 어떤 알고리즘 패턴에 약한지
- 왜 이 문제를 틀렸는지
- 비슷하지만 조금 다른 문제를 다시 풀 수 있는지
- 며칠 뒤에도 같은 패턴을 기억하는지
- 정말 이해한 건지, 아니면 그냥 외운 건지
같은 부분들이었습니다.
즉, 단순 추천보다 중요한 것은: “개인화된 복습과 약점 분석” 이라는 생각이 들었습니다.
새로운 방향성
그래서 프로젝트 방향을 완전히 바꾸기로 했습니다.
개인적으로는 “코드트리”가 알고리즘 연습에 굉장히 좋은 플랫폼이라고 생각했습니다.
단순히 문제만 제공하는 것이 아니라, 커리큘럼과 복습 흐름 자체가 꽤 잘 설계되어 있었기 때문입니다.
하지만 제휴 대학도 아니고, 개인이 사용하기에는 가격이 꽤 부담스러웠습니다.
그러면서 자연스럽게 이런 고민을 하게 되었습니다.
“알고리즘 공부에서 진짜 중요한 것은 무엇일까?”
생각해보면, 알고리즘 문제를 풀 때 핵심은 단순히 정답 코드를 작성하는 것이 아닙니다.
쉬운 문제든 어려운 문제든 결국 중요한 과정은:
문제를 읽고
→ 어떤 자료구조나 알고리즘 패턴이 필요한지 고민하고
→ 직접 테스트 케이스를 만들어보고
→ 반례를 생각하고
→ 시간복잡도를 계산하고
→ 풀이를 구현하는 과정
이라고 생각합니다.
하지만 최근에는 AI가 너무 강력해지면서, 문제에 대해 충분히 고민하기 전에 바로 AI에게 풀이를 물어보거나, 정답 코드를 복사해서 이해 없이 넘어가는 경우도 굉장히 많아졌습니다.
저 역시도 AI를 굉장히 자주 사용하는 편이지만, 오히려 그렇기 때문에 더 위험하다고 느끼는 순간들이 있었습니다.
특히 알고리즘 공부에서는:
* “왜 이 알고리즘을 떠올려야 하는지”
* “왜 이 자료구조를 써야 하는지”
* “어떤 반례가 존재하는지”
* “어디서 시간초과가 나는지”
같은 고민 과정이 굉장히 중요한데, 이 과정 자체를 건너뛰게 되는 경우가 많았습니다.
그리고 문제를 많이 푸는 것과, 실제로 실력이 늘어나는 것은 또 다른 이야기라고 느꼈습니다.
예를 들어:
* 비슷한 유형인데도 며칠 뒤 다시 못 푸는 경우
* DP 문제를 많이 풀었는데 점화식을 스스로 못 세우는 경우
* 그래프 문제를 풀었는데 BFS/DFS 선택 기준이 명확하지 않은 경우
등을 계속 경험했습니다.
결국 부족했던 것은:
* 문제 수
* 정답 코드
* 풀이 암기
보다는,
“개인이 어떤 개념에 약한지 분석하고, 적절한 시점에 다시 복습하게 만드는 시스템”
이라는 생각이 들었습니다.
그래서 기존 프로젝트도 단순한 “문제 추천기”에서, 조금 더 개인화된 방향으로 바꾸고 싶어졌습니다.
앞으로는:
- 어떤 알고리즘 패턴에 약한지
- 어떤 유형의 반례를 자주 놓치는지
- 어느 난이도에서 막히는지
- 힌트를 너무 빨리 보는지
- 개념을 실제로 이해했는지
같은 부분들을 추적하면서, AI를 단순 정답 생성기가 아니라:
“학습을 보조하는 도구” 로 사용하는 방향을 고민하고 있습니다.
예를 들어:
- 문제를 완전히 이해했다면 비슷한 변형 문제를 생성해주고,
- 특정 개념을 오래 틀리면 다시 복습시키고,
- 너무 빠르게 정답을 보면 mastery를 낮게 반영하고,
- 반복적으로 약한 패턴을 추적하는 형태입니다.
아직은 작은 규모의 개인 프로젝트 단계이지만, 단순한 온라인 저지보다:
“개인화된 알고리즘 훈련 시스템” 에 더 가까운 방향으로 발전시켜보고 싶습니다.
1. 개인별 알고리즘 약점 분석
사용자의 풀이 기록을 기반으로:
- Prefix Sum
- Graph
- DP
- Binary Search
- Greedy
같은 개념별 숙련도를 추적합니다.
단순 solved/unsolved가 아니라:
- 풀이 시간
- 힌트 사용 여부
- 실패 횟수
- 복습 간격
- 화면 이탈
등도 함께 반영할 예정입니다.
2. 온라인 저지 + 실시간 코드 실행
기존에는 추천만 했다면, 앞으로는 직접 문제를 풀 수 있는 환경도 만들 계획입니다.
다만 처음부터 거대한 온라인 저지를 만드는 것이 목표는 아닙니다.
우선은:
- Python/C++ 실행
- Sandbox 기반 코드 실행
- Hidden Test
- Time Limit / Memory Limit
정도만 포함한 작은 규모의 Judge 시스템부터 구현하려고 합니다.
3. AI 기반 변형 문제 생성
아마 알고리즘에 특화된 AI 모델을 사용해야 할 것으로 생각되는데, 이는 추후 개발 과정에서 다루도록 하겠습니다.
앞으로의 목표
우선은 제가 직접 사용하면서, 학과 친구 2~3명 정도를 베타테스터로 모집해볼 생각입니다.
Ralph 사진이 있는 이유
https://x.com/ryancarson/status/2008548371712135632 : Step-by-step guide to get Ralph working and shipping code
이번에는 프로젝트 구현할 떄, Ralph Loop를 도입해보려고 하기에 넣어 뒀습니다.
다음 글에서 초기 문서와 구현 과정을 공유하도록 하겠습니다.
댓글