서론
아직도 고등학생 시절과 똑같은 삶을 살고 있는데 어느새 대학교 졸업이 코앞으로 다가와 버린 만 22세 대학교 4학년 직장인의 이야기입니다. 지난 몇 년 동안 연말정산 글 분량의 대부분을 PS로 채웠는데, 올해라고 크게 다르진 않습니다. 4학년인 만큼 대학교 생활의 전반적인 리뷰와 취업 관련 내용이 조금 추가되었습니다.
대학 생활의 계획과 실제
2020년 11월에 대학교 합격을 확정지은 뒤, 대학교에 다니는 동안 시기 별로 이루고 싶은 목표와 나름의 계획을 세웠었습니다.
- 2021 - 2022년(1-2학년): PS 열심히 하기
- 1학년 때 SCPC 수상해서 취업 걱정 빠르게 해결
- 2학년 때 ICPC 수상한 뒤 PS 접기
- 2023년: 휴학
- 좋아하는 분야 탐색
- 하고 싶은 공부하기
- 2024 - 2025년(3-4학년): 진로 결정 & 졸업
- 학부 연구생을 하면서 진학과 취업 사이에서 고민
- 진학을 포기한다면 최대한 빠르게 포기하고 직무 결정
- 졸업 전에 어떻게든 자리를 찾아간다!
간단히 요약하면, 2학년 때까지 PS로 얻을 수 있는 이득을 모두 얻고 취업의 하한선을 끌어올린 뒤, 남은 시간 동안 제가 미처 경험해 보지 않은 분야를 살펴보면서 진로를 정하고 싶다는 계획을 세웠었습니다. 하지만 현실은…
- 2021년 (1학년)
- 입학 전인 1월부터 연구실에 들어갔지만, 연구와 별로 맞지 않아서 8월까지만 근무
- SCPC 수상 실패, UCPC 수상 실패, ICPC 수상 실패, 현대모비스 5등상
- 2022년 (2학년)
- ICPC를 너무 잘 치는 바람에 예정에 없던 World Finals 진출
- SCPC 수상 실패, UCPC 수상 실패, 현대모비스 우수상
연구와 맞지 않는다는 것을 1학년 1학기에 깨달은 것은 계획보다 빨랐지만 오히려 좋은 흐름이라고 생각하고, SCPC에서 상을 받지 못한 것은 앞으로도 기회가 많이 남았으므로 별로 문제가 되지 않습니다. 하지만 ICPC World Finals에 진출한 것이 2학년 때 PS를 접겠다는 계획에 제동을 걸었습니다.
사실 저 말고도 이 대회 때문에 인생의 계획이 꼬인 사람은 많습니다. 지난 몇 년 동안 COVID-19 때문에 WF 개최가 1년 정도 밀려있었고, ICPC HQ는 2022 WF와 2023 WF를 2023년 11월에 이집트에서 동시 개최하겠다는 결단을 내렸습니다. 그리고 그 대회는 이스라엘-하마스 전쟁 때문에 2024년 4월로 연기되었고, 이에 따라 2021년과 2022년 ICPC 리저널 대회를 치른 사람들은 2024년 4월까지 PS도 못 접고 군대도 못 가고 대회 개최만 기다리게 되었습니다.
아무튼 PS를 못 접게 된 저는 “이왕 이렇게 된 거 WF 한 번 더 가자”는 마인드로 휴학 계획을 철회하고 2023년에도, 2024년에도 PS를 하게 됩니다.
- 2023년 (3학년)
- “이왕 이렇게 된 거 WF 한 번 더 가자!”
- ICPC World Finals 한 번 더 진출, SCPC는 한 번 더 수상 실패, UCPC 수상
- 네이버 인턴 합격 (2024년 1-2월 근무)
- 2024년 (4학년)
- 취업함!
- SCPC (드디어) 수상
2023년에는 2022년보다 훨씬 강한 팀으로 ICPC에 참가해 순조롭게 WF 티켓을 따냈습니다. 하지만 졸업을 1년 정도밖에 남겨두지 않은 시점에서 SCPC 수상에 한 번 더 실패하면서 처음으로 졸업 전에 취업할 수 있을지 진지하게 고민하게 되었습니다. PS로 취업을 날로 먹겠다는 생각을 버리고 진로를 고민하려고 했으나 할 줄 아는 게 없어서 고민하고 있던 와중에, 다행히 네이버에서 자료구조를 잘하는 인턴을 구한다는 공고를 보고 지원해 합격하게 되어 취업 걱정을 어느 정도 덜게 되었습니다.
2024년에는 애증의 대회인 ICPC World Finals에 2번 참가했고, 대회 참가 4번째 만에 드디어 SCPC에서도 상을 받았습니다. 이미 다른 회사에 합격한 상태여서 수상의 기쁨은 과거의 제 간절함에 비해 덜했지만, 그래도 8년 동안의 알고리즘 대회 여정에서 유종의 미를 거두었다는 점에서 참 기뻤습니다.
이 밖에도 대학교에 다니면서 꼭 이루고 싶은 목표로 “선린인터넷고등학교 나정휘보다 숭실대학교 나정휘를 유명하게 만들기”가 있었습니다. 고등학생 때부터 백준 랭커에 블로그도 유명하고 UCPC 출제도 하는 등 PS 판에서는 어느 정도 인지도가 있었습니다. 하지만 과거에만 머물러 있지 않고 더욱 발전하는 사람이 되고 싶었고, 그때보다 더 좋은 성과를 거두고 싶었기에 저런 목표를 세웠습니다. 그리고 그 목표는 다행히 성공적으로 이룬 것 같습니다.
졸업 전에 어떻게든 취업하는 것을 제외하면 계획대로 된 것이 하나도 없지만 목표했던 바를 졸업 전에 모두 이루었다는 점에서, 그리고 인턴 때와 지금 모두 회사에서 모두 분산 시스템을 다루는 점에서, 제 대학 생활은 eventually consistency 정도의 단어로 요약할 수 있을 것 같습니다.
취업 준비
너무 길어서 다른 글로 분리했습니다. (링크)
Problem Solving
대회 운영
올해도 여러 대회의 문제 출제/검수에 관여했습니다.
- 2024 KOI 1차 대회 / 2차 대회
- 2024 NYPC 라운드 1 / 라운드 2-A / 라운드 2-B / 본선
- 2024 LGCPC 예선 / 본선
- Hello, BOJ 2024!
- 선린인터넷고등학교 교내 대회, 숭실대학교 교내 대회, 서울사이버대학교 교내 대회, SUAPC Summer
제 손을 거친 많고 많은 문제 중, 저에게 가장 뜻깊은 문제는 2024 KOI 2차 중3/고2 XOR 최대 입니다. 고등학생 때 KOI 고등부 2번을 안정적으로 풀 수 있는 실력을 갖추기 위해 정말 많은 노력을 들였지만 실패했는데, 그런 고등부 2번에 아이디어부터 세팅까지 모두 제 손으로 작업했다는 것이 감격스러웠습니다. 그전까지는 다른 사람들이 만든 문제를 세팅하기만 해서 KOI 홈페이지에 이름이 올라가진 않았는데, 드디어 홈페이지(링크)에 문제를 올릴 수 있게 되었습니다.
제가 만든 문제에 대한 몇 가지 코멘트를 덧붙이자면…
2024 KOI 2차 중3/고2 XOR 최대 문제는 2년 전에 한 코드포스 문제(링크)를 잘못 읽은 채로 풀어서 나온 문제입니다. 처음에는 랜덤 데이터에서 $O(N)$에 해결하는 풀이만 있었지만, 문제 아이디어 발전 과정에서 suffix array를 이용한 $O(N \log N)$ 풀이가 나왔고, 이후에 별다른 알고리즘을 사용하지 않는 $O(N)$ 풀이가 나와서 대회에 나올 수 있게 되었습니다.
2024 LGCPC 예선 A. 고장난 계산기 문제는 이것을 보고 만든 문제입니다. 이를 이용하면 파이썬 코드 2~3줄 정도(링크)로 간단하게 풀 수 있지만, 직접 수식 파싱을 하는 분들이 많아서 안타까웠습니다. 정답 코드와는 다르게, 체커는 약 190줄(링크)입니다. recursive descent parser를 이용해 수식이 올바른지 확인한 뒤, 나올 수 있는 값은 DP를 이용해 구하는 방식입니다.
Hello, BOJ 2024! B. 2024는 무엇이 특별할까? 문제는 원래 숭실대학교 교내 대회에 내려고 했지만, Hello BOJ에 문제가 부족해서, 그리고 교내 대회에 내기에는 너무 좋은 문제라서 Hello BOJ에 냈습니다. 처음에는 $K = 1$인 문제의 풀이를 만들었는데, 조금 더 고민해 보니 어렵지 않게 $K > 1$로 확장할 수 있어서 $K \le 10^{18}$ 버전으로 출제했습니다.
2024 숭실대 교내 대회 B. 팀명 정하기 2 문제는 2020-2023 숭실대학교 ICPC 수상 팀 이름을 이용해 만든 문제, 2024 숭실대 교내 대회 C. 온데간데없을뿐더러 문제는 제목과 난이도를 먼저 정하고 만든 문제입니다. 2024 숭실대 교내 대회 F. 피보나치 기념품 문제는 NP-Complete 문제인 subset sum 문제에 조건을 추가해서 다항 시간에 풀리도록 만든 문제입니다. 예상했던 것보다 많이 풀려서 놀랐습니다.
이 밖에도 용돈을 벌기 위해 문제를 몇 개 출제하기도 했습니다.
대회 참가
10년 동안 안 하던 해외여행을 ICPC 덕분에 몰아서 했습니다. 2월에 베트남 하노이(2024 ICPC Asia Pacific Championship), 3월에 이집트 룩소르(2023 ICPC World Finals), 9월에 카자흐스탄 아스타나(2024 ICPC World Finals)까지… 참 힘들었습니다.
2024 Asia Pacific Championship 후기는 (링크)에서 볼 수 있습니다.
2023 ICPC World Finals는 팀원 2명이 모두 PS를 접은 사람이라서 (포스텍 팀에게는 미안하지만) 아무런 기대를 하지 않고 참가했고, 이집트 유적지만 열심히 구경하다가 왔습니다. 대회가 룩소르에서 열려서 피라미드는 보지 못했지만, 여러 신전과 왕가의 계곡(valley of the kings)에 있는 여러 파라오(람세스 6세, 투탕카멘, 세티 1세)의 무덤 등을 봤습니다. 분명 이집트 갔다가 돌아온 직후에는 싫었던 기억(특히 날씨)만 가득했었던 것 같은데, 반년 넘게 지난 지금 다시 돌아보면 안 좋았던 것들은 전혀 기억나지 않고, 관광지 구경하면서 신기해했던 것만 생각납니다.
2024 ICPC World Finals는 운이 아주 좋으면 동메달 끝자락을 노려볼 수도 있다는 약간의 희망을 품고 출발했지만, 메달의 벽은 너무 높았습니다. 한 문제 정도는 더 풀 수 있었을 것 같은데, 그보다 더 위는 아무리 해도 못 갈 것 같습니다. 제가 마지막에 한 문제를 못 푼 채로 끝나서 완전히 만족할 만한 결과라고 생각하진 않지만, 그래도 마지막 ICPC를 기분 좋게 끝내서 다행이라고 생각합니다.
월드 파이널 2개 후기 언제 올리지…
이 밖에도 글 초반에 언급했듯이 SCPC에서 4번의 도전 끝에 5등상을 받았고, UCPC는 2018년 계절학교에서 만난 친구들과 함께 팀을 만들어서 재미있게 쳤습니다. UCPC는 제가 조금만 더 침착했으면 상 받을 수 있었을 것 같은데, 팀을 꾸릴 당시에는 수상 생각 없이 즐겜용으로 만든 팀이었어서 크게 아쉽지는 않습니다.
기타
올해는 계절학교 코치 대신 교수님 12명과 함께 유일한 학부생 신분의 강사로 참여했습니다. 여름학교에서 동적 계획법과 오토마타를 주제로 강의했고, 강의 자료는 (여기)에서 볼 수 있습니다. 국가대표 합숙 교육에 코치로 참가해서 약 2주 동안 카이스트 기숙사에서 생활하기도 했습니다.
solved.ac 에서는 프로 플랜을 구독하면 그날 푼 가장 높은 난이도의 문제로 스트릭 색을 칠할 수 있습니다. 작년 9월부터 약 15개월 동안 모든 다이아몬드(파란색)를 하나의 connected component로 관리하고 있습니다. 학교에 다닐 때는 금요일과 토요일이 가장 시간이 많아서 그때 다이아몬드 문제를 풀었는데, 회사에 들어간 이후로는 회사에서 주말 역할을 하는 일요일과 월요일에 풀고 있습니다. 입사 3주 전부터 아래에 있던 파란색 덩어리를 위로 끌어올리느라 고생을 좀 했던 게 기억납니다.
지금 와서 돌아보면 2022년 서울 리저널 이후로는 팀 연습을 제외하면 Competitive Programming을 위한 공부를 아예 하지 않고 있습니다. 제가 주로 공부하는 방식으로는 더 실력을 올리지 못할 것 같다는 느낌을 받은 것이 가장 큰 이유인 것 같습니다. 공부 방식을 바꾼다면 더 올릴 수 있겠지만, ICPC에서 제가 맡은 역할은 충분히 잘하고 있어서 굳이 바꿀 필요를 느끼지 못했습니다. 개인 대회, 특히 SCPC에서 성적이 안 좋은 것도 실력보다는 대회 전략의 문제라고 생각해서, SCPC 4~5등상 받는 것을 목표로 한다면 이대로 괜찮을 것 같았습니다. 실제로 3년 동안 SCPC에서 상을 받지 못하다가 올해 상 받은 것도 전략을 잘 세우고 그 전략대로 침착하게 행동해서 받은 거지, 실력이 올라서 받은 건 아니라고 생각합니다. 문제 푸는 실력만 본다면 오히려 2022년 SCPC 본선 당시가 더 잘했던 것 같습니다. 2024 ICPC World Finals가 끝나고 난 뒤에는 잠시 후회를 하긴 했지만…
잡담
학교생활
1학기에는 졸업을 위해 필요한 20학점을 편하게 채우기 위해 온라인 과목 위주로 들었고, 2학기에는 수강 신청에서 무려 0과목을 신청해서 쓸 내용이 없습니다.
장발
아는 사람들은 알겠지만, 저는 2021년 11월 초부터 머리를 길러서 2024년에 와서는 꽤 긴 머리카락을 달고 다녔습니다(영상1, 영상2, 영상3). 회사 입사를 2주 앞둔 9월 말에, 35개월 만에 머리를 잘랐습니다. 원래는 2023년 11월과 2024년 9월에 각각 ICPC World Finals가 있으니 긴 머리와 짧은 머리로 한 번씩 가서 사진을 남기면 좋겠다고 생각해서 2024년 봄 정도에 자를 생각이었습니다. 하지만 2023년 11월에 예정되어 있던 대회는 2024년 4월로 연기되었고, 이집트에 갔다 온 뒤로는 학교 시험, 취업 준비, 대회 운영 등으로 9월까지 정말 정신없는 순간의 연속이어서 머리 자를 생각을 못 하고 있었습니다.
알고리즘 대회도 다 끝나서 숨을 돌릴 틈이 생겼고, 마침 회사도 들어가니까 딱 적절한 시기라고 생각해서 9월 말에 자르게 되었습니다. 회사 때문에 머리 잘랐냐고 물어보는 분들이 꽤 있는데 그런 건 아닙니다. 9월 말에 머리 자른 이후로 지금까지 또 안 자르고 버티고 있습니다.
잘라낸 머리는 40cm 이상이었고, 대한민국사회공헌재단(링크)을 통해 기부했습니다. 어린 암 환자들에게 많은 도움이 되기를 바랍니다.
마무리
4학년이라 학교에서 시간을 많이 보내지 않아서 쓸 내용이 없고, 인턴십이나 취업 관련 내용은 다른 글로 분리해서 그런지 평소보다 양이 많이 적습니다.
내년 목표를 세울 차례입니다.
- PS 라이브러리 만들기
- ICPC 출제
- 효율적으로 일하기
지난 4년 동안 작성한 팀노트 코드는 한정된 공간 안에 최대한 많은 내용을 담기 위해서 과도하게 압축해 놓은 상태이고, 전역 변수를 활용한 코드도 있어서 객체를 여러 개 생성하지 못하거나 함수를 여러 번 호출하면 결과가 달라질 수도 있습니다. 이제는 팀노트를 볼 일이 없으니, 지금보다 더 편하게 사용할 수 있는 라이브러리를 다시 만들어 보고 싶습니다.
고등학생 때 제가 가장 시간을 많이 들였던 일은 KOI와 NYPC 같은 대회에 참가하고, 국제정보올림피아드 계절학교에서 만난 친구들과 함께 공부하는 것이었습니다. 고등학교를 졸업한 뒤에도 이것들을 놓고 싶지 않아서 제가 직접 KOI, NYPC, 계절학교에 기여하고 싶다는 생각을 항상 했었고, 어떻게 인연이 닿아서 셋 모두에 많이 관여하는 사람이 되었습니다. 비슷하게, 저는 대학생으로 지내는 동안 ICPC 준비에 가장 많은 시간을 쏟았고, 아직은 ICPC 커뮤니티를 떠나고 싶지 않습니다. 따라서 서울 리저널 대회나 아시아 태평양 지역 대회, 아니면 BAPC와 같은 유럽 지역의 대회 등 어떤 방식으로라도 ICPC에 기여하고 싶어서 방법을 알아보려고 합니다.
위에서 PS 이야기만 한참 늘어놓았지만, 이제 제 신분은 직장인입니다. 아직은 일을 효율적으로 하지 못한다고 생각해서, 내년에는 생활 패턴을 교정하고 주변 환경을 정리해서 일을 효율적으로, 그리고 잘 집중해서 할 수 있는 환경을 만들려고 합니다.
어느새 졸업이 코앞으로 다가왔습니다. 지난 몇 년 동안 항상 명확한 목표가 있어서 그 목표를 향해 달렸었는데, 이제는 새로운 목표를 찾아야 할 때가 되었습니다. 앞으로 어떤 일이 펼쳐질지 기대가 되면서 두렵기도 합니다. 직장인의 삶은 어떤지 잘 체험해 보고 2025년 정산으로 돌아오겠습니다.
끝!