Good Bye 2025!

서론

어느새 2년 차(?) 개발자가 되어버린 한 직장인의 이야기입니다. 직장과 취미를 병행하는 게 쉽지 않음을 뼈저리게 느끼고 있습니다.

블로그

이 블로그는 2018년에 개설해서 벌써 8년째 운영하고 있습니다. 2021년까지는 정말 많은 애정을 갖고 관리했었는데, 점점 글을 올리는 것이 뜸해지고 있습니다. 연도별 포스트 개수는 다음과 같습니다.

2018 (고1) 2019 (고2) 2020 (고3) 2021 (대1) 2022 (대2) 2023 (대3) 2024 (대4) 2025
160 390 193 99 14 82 9 4

SCPC와 ICPC 준비에 집중하느라 글을 작성할 시간이 없었던 2022년을 제외하면, PS에 대한 애정도와 글 개수가 비례하는 것 같습니다. 돌이켜보면 고등학생 때는 모든 게 처음이라 새로운 것을 배우고 정리해서 공유하는 것이 정말 즐거웠습니다. 물론 대학생이 된 후에도 공부하는 것은 여전히 즐거웠습니다. 다만 그 당시에 새롭게 접한 것들은 글로 적기에는 너무 사소한 테크닉인 경우가 많았습니다. 반대로 너무 복잡해서 완전히 이해하지 못한 채 구현체만 블랙박스로 가져다 쓰는 경우도 많아서 글을 올리지 못했습니다. PS만 10년 가까이 하다 보니 새로운 것을 접하는 일 자체가 줄기도 했고, 초창기에 비해 블로그가 너무 유명해진(?) 탓에 완성도가 높은 글만 올려야 한다는 부담감도 한몫했습니다.

올해는 노선을 바꿔서, 다른 곳에서 보기 어려운 글을 작성해 보자는 생각을 했습니다. 예를 들면 LGCPC나 NYPC처럼 대회 공식 풀이가 없거나 빈약한 대회의 풀이를 적는 것, 또는 규모가 큰 알고리즘 대회의 운영 후기를 적는 것 등이 있습니다. 올해 NYPC에서 도저히 풀기 싫은 두 문제를 제외한 모든 문제의 풀이(예선, 본선)를 올린 것과, Hello BOJ 2025의 개최 후기(링크)를 매우 자세하게 적은 것 모두 그러한 노력의 일환이었습니다. LGCPC 풀이와 KOI/ICPC 후기도 작성해 보려고 했지만, LGCPC는 실력과 시간의 부족 때문에, KOI와 ICPC는 후기를 적을 만큼 많은 역할을 맡지 못해서 적지 못했습니다. 그래도 이 글에서 조금이나마 풀어보려고 합니다.

내년에는 어떤 전략을 갖고 글감을 찾아야 할까요? 회사에서 사용하는 기술에 대해 공부한 기록을 올릴 수도 있고, 예전처럼 문제 풀이를 올리는 방법도 있습니다. 의도한 것은 아니지만 이 블로그가 저를 설명하는 가장 큰 아이덴티티라는 것은 부정할 수 없어서, 내년에는 블로그를 살리기 위해 노력하려고 합니다.

2025년 목표 돌아보기

PS 라이브러리 만들기
라이브러리를 쉽게 테스트하고 배포할 수 있는 툴을 만든 뒤에 지쳐서 정작 해야 할 일을 하지 못했습니다. 이미 팀노트에 코드가 있으니 배포 프로세스만 만들면 금방 끝나리라 판단해 우선순위를 정했습니다. 하지만 4년에 걸쳐 작성한 코드를 하나의 스타일로 통일하는 작업이 필요하다는 점을 간과했습니다. 토이 프로젝트 할 때 MSA를 하겠다면서 각종 인프라 세팅부터 끝내놓고 시작하다가 퍼지는 게 이런 느낌일까요? 아무튼 하나라도 깨달은 것이 있다는 점에서 (결과와 별개로) 완전히 망한 프로젝트는 아닌 것 같습니다.

ICPC 출제
올해 서울 리저널에 두 문제를 출제했습니다. 자세한 이야기는 뒤에서 이어집니다.

효율적으로 일하기
1년 전에 비해 많이 나아졌지만, 아직 개선할 여지가 많습니다. 제 머리의 concurrency를 늘리는 것과 스케줄링을 효율적으로 하는 것 모두 개선이 필요합니다. 회사 특성상 쉽지는 않지만, 생활 패턴을 규칙적으로 만드는 것도 중요한 목표 중 하나입니다. 일단 이 마크다운 파일의 생성 시각이 ‎12월 15일 오전 4시 9분인 것부터 문제가 있어 보입니다.

Problem Solving

대회 운영

올해는 한국에서 열린 메이저 PS 대회 중 SCPC를 제외한 모든 대회의 운영에 관여했습니다. 정말 엄청난 오지랖꾼입니다.

  • 2025 ICPC 서울 리저널 대회
  • 2025 KOI 2차 대회
  • 2025 NYPC 라운드 1 / 라운드 2-A / 라운드 2-B / 본선
  • 2025 LGCPC 예선 / 본선
  • 2025 UCPC 후원
  • Hello, BOJ 2025! / Good Bye, BOJ 2025!
  • 선린인터넷고등학교 교내 대회, 숭실대학교 교내 대회, 서울사이버대학교 교내 대회

제가 출제한 문제에 대한 몇 가지 코멘트를 덧붙이자면…

2025 ICPC 서울 H. Fair Problemset 문제는 예전에 ICPC 준비할 때 팀 연습을 하면서 떠올린 소재입니다. 3명이 문제를 나눠서 읽다 보면 어느 한 명만 너무 어려운 문제를 몰아서 받게 되는 경우가 종종 있는데, 이런 일을 방지하기 위한 문제 배치를 고민하다가 만들게 되었습니다. 지금까지 한국 ICPC 대회에 나오지 않던 유형이라 많은 사람이 당황했으리라 생각합니다. 2021년 서울 리저널에 출제된 Squid Game을 제외하면 한국 ICPC에 어려운 수학 문제가 나온 적이 없었고, 그에 따라 한국에서 ICPC를 준비하는 팀들은 정수론이나 조합론을 잘 준비하지 않는 경향이 있습니다. 돌이켜 보면 제가 APAC나 WF에서 더 좋은 성적을 거두지 못했던 결정적인 이유는 매번 수학이었습니다. 다른 팀들은 저와 같은 후회를 하지 않길 바라는 마음으로 이번 ICPC에 수학 문제를 출제했습니다. 어차피 한 대 맞을 거라면 서울 리저널에서 맞아서 정신 차리고 APAC나 WF에서 좋은 성적을 거두는 게 좋을 테니까요. 수학 문제 때문에 리저널 챔피언을 12년 만에 해외 팀에 빼앗길까 봐 걱정을 조금 했지만, 다행히 서울대학교가 올해도 성공적으로 외침을 방어했습니다.

2025 ICPC 서울 M. Triple Fairness는 H번에서 다루는 수열 하나를 직접 구성하는 문제입니다. 모든 팀이 풀 수 있을 정도로 매우 쉬운 문제를 의도했고, 실제로 한 팀을 제외한 모든 팀이 이 문제를 해결했습니다. 사실 N이 3의 배수일 때도 어렵지 않게 풀 수 있기 때문에 저는 그 방향을 더 선호했습니다. 하지만 대회는 출제자의 자아실현보다 문제 세트의 전체적인 밸런스가 더 중요하기 때문에 지금의 제한으로 출제하게 되었습니다.

2025 LGCPC 예선 A. 서브태스크 점수 문제는 지문을 읽으면 알 수 있겠지만, 제가 필요해서 만든 문제입니다. 서브태스크 점수가 주어지는 대회는 서로 해결한 서브태스크 집합이 다른 두 참가자의 점수가 항상 다르게 만드는 것이 여러모로 좋습니다. 그래서 원래는 최소한의 점수 수정으로 동점이 발생하지 않도록 만드는 문제를 만들려고 했지만, 너무 어려워서 현재의 상태가 되었습니다. 한 문제 안에서 비트 마스크를 이용한 완전 탐색, 위상 정렬, 냅색 DP를 모두 구현해야 하므로, 알고리즘 대회보다는 코딩 테스트에 더 적합한 유형이라고 생각합니다.

2025 서울사이버대 교내 대회 J. 대충 그래프 개수 세는 문제 는 connected induced subgraph의 개수를 쉽게 셀 수 있는 그래프 클래스에 대해 고민하다가 만들게 되었습니다. biconnected, chordal, bounded treewidth 등 여러 클래스를 고민했지만, 일부 클래스는 풀이를 찾지 못해서, 또 다른 클래스는 풀이가 너무 복잡해서 결국 interval graph에서 개수를 세는 문제로 출제하게 되었습니다. interval graph로 확정한 뒤에도 incremental, decremental, $i$번째 구간만 제거했을 때의 정답을 구하는 쿼리, 쿼리로 주어진 구간까지 $N+1$개의 구간에서의 정답을 구하는 쿼리 등 여러 변형을 고민해 봤지만 효율적인 풀이를 찾지 못해서 쿼리 없이 문제를 냈습니다.

3달 동안 준비한 Good Bye, BOJ 2025! 도 성공적으로 마무리되었습니다. 오랜 시간 애정을 갖고 만들어 온 대회인 만큼 하고 싶은 이야기가 정말 많은데, 아직 생각을 완전히 정리하지 못해서 다른 글에서 다시 이야기해 보려고 합니다. 결론만 미리 말하자면 지금과 같은 형식의 대회는 아마 더 이상 열리지 않을 것 같습니다.

계절학교

올해 PS를 하면서 가장 많은 노력을 기울인 프로젝트는 계절학교 강의자료를 다시 만드는 것이었습니다. 사실 처음반 강의 리뉴얼은 몇 년 전부터 “하면 좋다” 정도의 이야기가 계속 나왔었습니다. 하지만 계절학교 수준의 강의자료를 3시간 * 16강 분량으로 만드는 건 매우 힘든 일이고, 주도적으로 드라이브를 거는 사람도 없었기 때문에 아무 일도 일어나지 않았습니다.

그러던 와중 2024년 8월에 3주 동안 KAIST에서 국가대표 합숙 교육이 진행되었고, 오랜만에 많은 코치가 모인 김에 본격적으로 논의를 시작했습니다. 커리큘럼은 저(jhnah917)와 구재현(koosaga), 김준겸(ryute) 코치가 주축이 되어 구성했습니다.

다행히 제가 예전 계절학교 자료를 모두 보관하고 있었고, 지난 몇 년간 동아리 활동을 하며 만들어둔 강의자료(ssu-sccc-study)도 있었습니다. 이를 바탕으로 제가 주도하여 자료를 제작했고, 다른 코치분들이 검수와 제가 익숙하지 않은 분야의 자료 제작을 맡아주었습니다.

긴 노력 끝에 올해 8월에 진행된 여름학교에 처음으로 새로운 강의자료가 사용되었으며, 아직 고쳐야 할 점이 여럿 있긴 하지만 반응은 꽤 좋았습니다. 사실 처음반을 저처럼 두 번씩 듣는 사람이 흔하지 않기 때문에, 학생들의 후기보다는 코치들과 실제로 강의를 진행하시는 교수님들의 후기를 주로 들었습니다. 학생들은 어떻게 느꼈는지 잘 모르겠습니다. 아직 공개되지 않은 자료는 돌아오는 1월부터 진행되는 겨울학교 강의에서 사용될 예정입니다. 여름학교보다 훨씬 재미있는 내용으로 알차게 구성했으니까 학생들이 재미있게 즐겨주면 좋겠습니다.

올해 8월에 진행된 여름학교는 코로나 이후로 5년 반 만에 오프라인으로 진행되었습니다. 2020년 1월 17일에 계절학교 끝나고 세상 밖으로 나왔더니 지구가 망해있어서 당황했던 게 엊그제 같은데, 벌써 6년 전 일입니다. 아무튼, 정말 오랜만에 오프라인으로 진행된다는 소식을 들은 저는 무려 일주일 동안 휴가를 내고(!!) 계절학교 코치를 하러 용인에 내려갔습니다. 여기에 말할 수 없는 우여곡절이 많았지만, 오랜만에 반가운 얼굴도 보고, 다음 세대를 이끌어가기 위해 열심히 공부하는 학생들도 보면서 5년 만에 계절학교의 열기를 느끼고 왔습니다. 코로나 이전처럼 학생들 전자기기를 압수할 수 없어서 아쉬웠지만, 그래도 일과가 끝난 후에 숙소에 돌아가서까지 문제를 토론하는 학생들이 참 기특하고 ‘나도 한때 저랬었지…’ 하는 생각에 잠기기도 했습니다. 물론 코치 속 썩이는 학생들을 보면서도 ‘나도 한때 저랬었지…’ 라는 생각을 했습니다.

당연히 PS를 하면서 매번 행복한 일만 있지는 않았지만, 힘든 일이 있을 때마다 계절학교에서 친구/코치님들과 열심히 즐겁게 공부했던 기억이 항상 든든한 버팀목이 되어주었습니다. 알고리즘 공부 외에도 계절학교에서 알게 된 친구들 덕분에 도움받은 일도 많기도 하고요. 이번 기수 학생들도 계절학교에서 열심히 공부했던 기억과 소중한 인연을 꼭 간직했으면 좋겠습니다.

대회 참가

이제는 학생 신분이 아니기 때문에 나갈 수 있는 대회가 별로 없습니다. 드디어 현대모비스 알고리즘 경진대회에서 일반부로 꿀 좀 빨아먹나 했더니 대회가 없어졌고, NYPC 코드배틀은 2002년생이라 참가 자격은 있었지만 NYPC 출제위원이라 참가하지 못했습니다.

하지만 2022년을 끝으로 제가 화나서 없애버린(…) 숭고한 연합 알고리즘 대회가 예상치 못하게 3년 만에 돌아왔고, 1년 이내 졸업생까지 참가할 수 있다고 해서 오주원(kyo20111) 선배와 함께 신나게 달려갔습니다. 다른 사람을 구해 3인팀으로 나가는 것도 고민했지만, 3인팀 1등 상금과 2인팀 3등 상금이 같다는 계산이 서서 2인팀 참가를 결정했습니다. 다른 팀들도 같은 이유였는지는 모르겠지만 2인팀이 많았던 것으로 기억합니다.

팀 이름은 PS AGI로 지었습니다. ICPC 때의 팀명인 PS akgwi를 이어받으면서도, 아기(baby)와 AGI(강인공지능)이라는 상반되는 두 단어를 중의적으로 포함하는 이름이었습니다. 두 명 모두 대학생 때보다는 실력이 감소했기에 팀원 이름은 초창기 언어 모델의 일종인 GPT-1과 Word2Vec 정하는 약간의 유머도 더했지만, 스코어보드에는 팀원 이름이 표시되지 않아 아쉬웠습니다. 대회 중에 약간의 우여곡절이 있었지만 다행히 월파 2회 진출자라는 타이틀에 먹칠을 하지 않고 1등을 했습니다.

6월에는 제14회 스마트테크 코리아(STK 2025, link)의 부대 행사로 열린 Cybersec Algo Wars 라는 대회에 참가했습니다. 대회 목적에 ‘보안 코딩’ 같은 문구가 있어 불안했지만, 공고를 자세히 보니 프로그래머스 플랫폼에서 진행된다는 점을 확인했습니다. 프로그래머스라면 순수 알고리즘 대회일 가능성이 높다고 판단해 일단 신청했습니다. 평일 점심시간에 열린 대회라 그런지 아니면 홍보가 제대로 되지 않은 건지 모르겠지만, 아무튼 저처럼 알고리즘 공부를 많이 한 사람은 보이지 않았고, 당연히(?) 1등 해서 상금 100만 원을 받았습니다.

이렇게 올해 참가한 모든 대회에서 빈집 털이 1등 했다는 타이틀을 지키기 위해 다른 대회에 더 나가지 않을 생각이었으나, 페이스북 해커컵이 올해도 열린다고 해서 티셔츠를 받기 위해 참가했습니다. 600등 정도 해서 아쉽게도 R3에는 진출하지 못했지만 티셔츠는 받을 수 있게 되었습니다. 200등대에 몰려있는 인도 국적의 치터를 모두 자르면 500등 안에 들어서 R3 진출할 수 있었을 텐데, 페이스북의 대처가 아쉬웠습니다. 이제는 제가 가장 자신 있는 분야에서도 LLM을 이길 수 없는 시기가 온 것 같습니다.

잡담

AI에 대한 생각

가끔씩 저에게 PS를 하는 사람의 입장에서 AI 모델의 발전에 대해 어떻게 생각하는지 물어보시는 분들이 있습니다. 이런 질문에 대한 제 생각을 짧게 작성해 보려고 합니다.

일단 제 취미 생활이 망가지고 있다는 생각이 가장 먼저 듭니다. 1-2년 전부터는 대회를 여는 게 PS에서 가장 재미있는 요소가 되었는데, 올해 여러 대회를 운영해 보면서 온라인 대회는 유지하기 어려울 수 있겠다고 생각하고 있습니다. 코로나 시절의 SCPC나 KOI 처럼 감독하지 않는 이상 쉽지 않아 보입니다.

그럼에도 불구하고 공부하는 입장에서는 좋은 도구가 생겼다고 생각합니다. AI 엔진이 나온 이후로 체스와 바둑을 공부하는 사람들이 AI를 이용해 공부하듯이, PS도 그렇게 공부할 수 있으리라 생각합니다. 풀이를 찾을 수 없는 플래티넘 정도의 문제는 GPT 5나 Gemini 3에 넣으면 풀이를 꽤 잘 알려준다는 점에서, 공부할 때 많은 도움이 될 수 있어 보입니다. 다만 LLM 모델이 잘하는 것과 하지 못하는 것을 구분하지 못한다면, 오히려 더 나쁜 방향으로 빠질 수 있기 때문에 항상 조심해야 합니다.

사실 작년에 o1이 나왔을 때만 하더라도 세상 사람들이 떠드는 것에 비해 별로 똑똑하지 않아서 아직 한참 남았다고 생각했었는데, 제가 생각했던 것보다 훨씬 빠르게 발전해서 당황하기도 했습니다. 하지만 그 과정에서도 얻은 게 있었습니다. 한동안 OpenAI가 자사 모델을 홍보할 때 코드포스 레이팅을 사용했었는데, 제가 잘 아는 메트릭이다 보니 얼마나 과장해서 발표하는지를 알 수 있었고, 덕분에 벤치마크를 곧이곧대로 믿으면 안 된다는 교훈 하나는 확실히 얻었습니다. LLM의 학습 방식을 이해한 뒤 그 성능을 다시 살펴보며, 제 공부 방법이 틀리지 않았다는 확신(혹은 위안)을 얻기도 했습니다.

마무리

직장인인데 회사 이야기가 없는 게 참 아이러니합니다. 네이버에서 인턴했을 때는 모든 오픈소스에 기여하는 것이 주요 업무였기에 블로그에 부담 없이 올릴 수 있었는데, 지금은 그렇지 않아서 회사 이야기를 적는 게 부담스럽습니다. 아마 앞으로도 계속 안 적을 것 같습니다.

작년에는 글을 마무리하면서 앞으로 어떤 일이 펼쳐질지 기대가 되면서도 두렵다고 했었습니다. 회사에 좋은 분들이 많아서 그런지 직장인도 생각보다는(?) 할 만한 것 같습니다. 올해 강연할 기회가 몇 번 있어서 제가 지금까지 어떻게 공부했는지를 돌아보는 시간을 가졌었는데, 이 과정에서 회사가 저의 어떤 면을 보고 뽑았는지를 조금이나마 이해할 알 수 있게 되었고, 회사에서도 그 강점을 살리기 위해 노력해야겠다는 다짐도 했습니다. 체력 관리만 잘 되면 참 좋을 텐데… 추석 이후로 여러 가지 일이 겹쳐서 운동을 잠시 쉬고 있는데, 내년에는 다시 운동을 시작해야겠습니다.

내년에는 올해보다 더 건강하고 튼튼한 사람이 되어서 돌아오겠습니다.

끝!