본문 바로가기

카테고리 없음

ICPC 2024 서울 리저널 우승 후기

오늘, 기나긴 2024년의 ps 여정을 2024 ICPC seoul regional 1등으로 마무리하였다. 이 시점에서 2024년 나의 ps 여정과 2022년 부터 시작된 자신감의 부재에 대해 못다한 이야기들을 글 하나에 모두 적어보려고 한다. 긴 글이 될 것이다.

 

Team 대성호 우승

 

 

Team 대성호의 결성

 

서울대학교에 진학한 ps를 잘하는 어린 친구들 6명이 모여서, 알아서 3대3으로 팀을 나눌 것 같은 분위기가 형성되었다. 6명의 목록은 다음과 같다.

 

leinad2 Current 2562/Max 2589 (본인)

puppy Current 2455/Max 2630

kizen Current 2812/Max 2812

 

benedict0724 Current 2489/Max 2634

urd05 Current 2612/Max 2612

numbering Current 2545/Max 2545

 

 

kizen은 06년생, urd05는 04년생, 나머지는 05년생이다. 팀에 대해서는 별 생각을 안 하고 있었는데, ucpc 시즌이 다가오자 자연스럽게 위 셋/아래 셋으로 나누어지게 되었다. 팀을 나눌 때는 kizen이 2500대의 레이팅이었기 때문에(물론 실질적 실력이 2500을 한참 넘는 것은 모두가 알았다) 꽤나 밸런스 있는 팀으로 나뉘었다.

 

후에 서술하겠지만, ICPC 2023의 강팀들이 군 문제 등등으로 빠지면서, 흥미로운 구도가 잡히게 되었고 ICPC 2024에는 어느 팀이든 우승을 노릴 수 있는 상황이라고 생각되었다.

 

SCPC 2024 (개인, 3등상)

 

현대 모비스/lgcpc 등등의 작은 대회들도 있지만, 메이저 대회들 중 가장 먼저 치루어진 것은 SCPC였다. 작년에 내 자신이 낼 수 있는 가장 최악의 퍼포먼스를 내면서, 5등상(..)을 탔기 때문에 올해는 확실히 3등상 이상의 성적을 바랬다. 다행히 3번이 내가 남들에 비해 잘하는 애드 혹(발상적 아이디어 문제)였기 때문에, 2번에서 조금 막혔지만 3번을 풀어내어 3등상을 받게 되었다. 2번에서 안 막혔다면 2등상을 노려볼 수 있었지만, 3번을 풀어내어 4등상을 안 받은 것에 만족한다. 팀원 puppy는 3등상, kizen은 4등상을 받았다. kizen은 언제든 1등할 수 있기 때문에 올해 약간 못 봤다고 별로 걱정은 되지 않는다.

 

UCPC 2024 (2등상)

 

UCPC 2024 본선에 진출하였다. UCPC는 puppy의 일정 문제 때문에 KAIST의 cocoa_chan 으로 대체하여 나갔다. 결론적으로 kizen이 말도 안되는 퍼포먼스를 보여주면서 2등상을 차지하였다. cocoa_chan은 1.5솔, 본인도 쉬운 문제만 골라서 3(or 4)솔을 하였는데, kizen이 어려운 문제 하나를 잡더니 20분만에 구현까지 완료하고, 다른 어려운 문제를 잡고 20분만에 푸는 것을 반복하면서 경악스러울 정도의 퍼포먼스를 내었다. 솔직히 풀이를 내는 것 까지는 이해하는데 정확하고 빠른 구현을 연속적으로 하면서 혼자서 LGM이 포함된 팀을 이기는 모습을 보면서 당황스러웠다. 반면 나는 다이아 2짜리 수학 문제인 K를 풀기 위해 존재하는 사람인데, 아이디어를 다 잡고 풀지 못해서 아쉬웠다.

 

성호 없는 성호팀/3등/2등상

 

너무 캐리를 받은 경험이 처음이라서, ICPC 때는 내가 1인분을 하기 위해 UCPC와 ICPC 사이의 기간에 연습하였다.

 

ICPC 2024 예선 (1등)

 

결론적으로 우승하였지만, C의 데이터 오류 때문에 껄끄러운 점이 없잖아 있었다. 본인은 C를 5분 정도 본 뒤 puppy에게 넘겼는데, puppy가 1분만에 풀고 ac까지 받아와서 놀랐다. 그러나 말도 안되는 사풀이었고, 결과적으로 사풀 때문에 우리 팀이 시간적으로 크게 이득을 보아 마지막에 내가 어려운 문제인 J를 풀 수 있게 되었다. J 덕분에 솔브 수 차로 1등하긴 했지만, C의 재채점이 진행되면서 솔브 수 차이도 없어지고 사실상 예선 등수가 의미가 있나 싶을 정도의 상황까지 오게 되었다. 여전히 좋은 퍼포먼스를 보여준 kizen과, 나쁘지 않은 퍼포먼스를 보여준 나를 보면서 위안을 삼았다.

 

 

본선과 예선 사이에 적당한 수의 팀 연습을 돌았고, 이를 통해 우리 팀은 큰 자신감을 얻었다. 특히 마지막에 돈 연습은 월드파이널에서 금/은메달을 노려볼 만한 팀이라는 것을 느끼게 해줬고, 연습 때 한 대로라면 본선 1등을 할 수 있다고 생각하였다. 사실 지금까지 대회들에서 우리 팀의 퍼포먼스는 매우 좋았기 때문에, 이런 자신감을 가져도 된다고 생각하였다.

 

ICPC 2024 본선 (대상, 1등)

 

본선 전에, 일본 리저널에서 1등한 팀이 한국에 온다는 사실을 깨달았다. 무려 월드파이널 금메달리스트(..)가 포함되고, 나머지 둘도 나랑 비슷한 수준의 미친 팀이었다. 대만에서 온 팀들도 꽤나 잘한다고 들었고, 그 외에 최근 실력이 무섭게 상승한 팀도 엄청 많았다. 레드 코더가 포함된 팀이 최소 12팀은 되는 것 같았고, 이 중 어느 팀에게 져도 이상하지 않았다. 특히 서울대에 유난히 레드 코더가 많았고, 그 들은 모두 좋은 성적을 낼 수 있는 팀들이었다. 우리 팀은 무조건 1등을 목표로 하였기에, 그저 우리가 해야할 것은 우리가 잘하는 것 뿐이었다.

 

다행히 2900대가 포함된 정말 말도안되는 강팀(Penguins, Newtrend)이 여러 이슈로 빠지게 되면서, 객관적으로 봤을 때 우리가 전력에서 가장 앞서는 팀 중 하나는 맞았다. 평균 레이팅 2610으로 일본 팀과 1/2위를 다투는 입지인 것 같았다.

 

가장 중요한 대회인 만큼, 대회의 타임라인에 따라 우리 팀이 어떻게 진행되었는지 기록해놓는다.

 

 

A solve(8 min)

 

내가 A를 전체 세 번째로 풀었다. 나름 빨리 짜기에 자신감이 있고, 코드포스도 시작하고 30분 정도에는 한 자릿수 등수를 유지한 적도 꽤 많을 정도로 쉬운 문제는 빠르게 짤 수 있는 나였는데, 타이완 팀에서 5분만에 풀었길래 약간의 벽이 느껴졌다. 풀이는 생각해볼 가치는 없지만, 쉬운 문제로 내기 괜찮은 문제였다.

 

B solve(17 min)

 

내가 B를 풀었다. 백준의 어떤 유명한 문제 에서 쓰는 아이디어를 그대로 가져오면 되어서 1초만에 풀었다. 근데 긴장을 한 탓인지 쉬운 구현임에도 인덱스 변환에서 말려서 꽤나 오래걸렸다. 두 문제를 풀었을 때 3등이었다.

 

L solve(25 min)

 

kizen이 L을 풀었다. 별 볼 일 없는 기하 문제라고 하였다.

 

J solve(47min, 3 wa)

 

내가 J에 말도 안되는 사풀 두개와, 구현 실수 하나를 포함하여 3 wa를 하고 22분을 소비한 뒤 ac를 받았다. 초반에 모든 팀들이 J를 틀리는 것을 보고 조금 신중했어야 했는데, 팀의 강점인 초반에 페널티로 밀어붙이기를 이어가려다가 너무 성급하게 하여 말렸다. 다른 팀원 두 명은 멘탈이 괜찮았는데, 나 혼자 멘탈이 나가 있었다. 심지어, 푼 뒤 내가 보고 있던 문제들은 D와 I로 대회가 끝날 때 까지 솔브가 아예 없는 문제들이었고, 이 문제를 내가 지금 풀 수 있을 리가 없었다. 그에 따라 그냥 나 혼자서 멘탈이 나가있었다.

 

스코어보드를 보니 생각보다 나랑 kizen이 ABL을 잘 밀어주었고, 다른 팀들도 J를 틀려 페널티 상으로 크게 밀리지 않는 것을 볼 수 있었다. 베트남 팀이 압도적인 페널티로 5솔브를 달리고 있고, 우리가 2위권(아마 4등)에 있었을 것이다. 이 때 부터 멘탈을 부여잡았다.

 

C TLE

 

kizen이 레전드 시간제한으로 악명이 높은 C에서 3번의 TLE를 받았다. C는 별로 재미도 없고, 감동도 없는데 시간제한은 이상하게 tight한 문제이다. 이 때 모든 팀들이 C를 두 번 이상 tle받은 상태였고, 그래서 별로 크게 신경이 쓰이진 않았다. 그냥 시간제한이 빡빡한 구데기 문제라고 생각하고 넘어갔다. kizen은 H의 풀이도 생각해놓은 상태였고, puppy가 곧 F를 풀 수 있을 것 같다고 하여 C는 일단 보류하였다.

 

F solve(68 min)

 

puppy가 F를 풀었다. 풀만한 constructive 문제였다. 재밌어 보이긴 하는데 그렇게 어려운 문제는 아니었다.

 

C TLE(3)

 

슬슬 팀들이 C의 시간제한을 커팅/캐시히트/fastio 등으로 우회해가면서 풀기 시작하였지만, 우리 팀은 아무리 최적화를 해도 TLE가 나는 말도 안되는 상황에 처했다. C가 슬슬 풀렸기에 불안해지기 시작하였다.

이 때부터 당분간 ABCFJL을 제외한 문제는 제출 시도도 없었고, 무엇을 풀 지 잘 모르겠었다.

 

K solve(114 min)

 

puppy가 뜬금 없이 K를 풀었다. 이 때 상위권 스코어보드에는 한 팀도 안 풀었길래 당연히 First Solve일 줄 알았는데, 밑에서 한 팀이 풀었다고 한다. 이상한 문자열 문제였고, 난이도가 그렇게 높지 않지만 이것을 빨리 푼 것은 대단한 것 같다.

 

H solve(168 min)

 

kizen이 고통스러운 구현을 해내면서, H를 무려 한 번에 맞았다. H는 C 다음으로 정답률이 낮은 문제로, 모든 팀들이 여러 번 틀리는 어려운 트리dp문제였는데, kizen이 정확히 풀어내었다. 역시 어려운 구현은 kizen이 담당하는 것이 맞는 것 같다.

 

나는 아직도 D랑 G랑 I를 번갈아 가면서 보고 있었는데, 뜬금 없이 거들떠보지도 않던 E가 풀리면서 E를 보기 시작했다. 이 때 1등은 KAIST의 BIG SHOT으로, 어린 친구들로 이루어져 서로 잘 아는 팀이었지만 우리를 솔브 수 차이로 이기고 있어서 매우 놀랐다. 이 팀도 평균 레이팅 2500 근처인데, 구현 잘하는 사람/아이디어가 좋은 사람/그냥 잘하는 사람으로 밸런스가 잘 맞추어진 팀이라 예선/본선 모두 좋은 성적을 내어 놀라게 하였다.

 

E wa

 

E는 알고보니 컨벡스 헐을 모방한 알고리즘을 대충 짜서 하면 될 것 같은 문제길래, 2일 전 팀 연습에서 기하를 주구장창 짠 내가 풀이를 내고 짰다. 기하라 그런지 한 번에 맞을 자신이 없었고, 진짜 wa가 나와서 절망하였다. 이제 거의 모든 팀이 푼 C와, 이상한 구데기 기하문제인 E를 고쳐야 하는데 앞길이 막막하였다.

 

G solve(207 min, 1 wa)

 

내가 E 코드를 디버깅하는 동안, G를 kizen과 puppy가 논의하여 사풀로 뚫었다. 사실 정해도 EERTREE 복붙으로 팀노트에 저 트리를 넣었는지를 판별하는 문제라 별로 감동도 없었다. 그냥 이런 문제를 왜 내는지도 모르겠지만 사풀로 잘 뚫어준 나머지 두 명에게 감사하다. G를 푼 나머지 팀들은 EERTREE 복붙으로 풀었다고 한다. 솔직히 사풀을 내긴 했지만, 26^100000개의 입력 중에 이 풀이를 막을 수 있는 데이터는 없을 것 같다는 추측이 나오고 있다.

 

KAIST의 BIG SHOT 팀에게 1솔브 차이로 밀리고 있었지만, G를 풀면서 동일 솔브에 페널티 우세로 1등으로 올라섰다. 210분에 스코어보드 프리즈가 이루어졌다. 프리즈 시 1등이었지만, 제출 내역과 우리 앞/앞/왼쪽 테이블에 있는 big shot팀이 환호하는 것을 보아 218분에 K를 풀었다는 것을 알 수 있었다. BIG SHOT는 9솔, 우리는 8솔이었고, BIG SHOT이 G, 우리 팀은 C/E를 풀어야 하였다.

 

C는 결국 puppy가 kizen 코드를 갈아엎고 다시 짜기로 하였다. 하지만 캐시 히트를 줄이는 방법을 생각하여 될 것이라고 하였다. 사실 이 때 반신반의하고 있었지만 어떻게 할 수 있는 방법이 없어 그냥 응원만 해주기로 하였다. puppy가 C를 짜는 동안 E의 틀린 점을 찾아서, 컴을 뺏은 뒤 제출하였다.

 

E solve(244 min, 2 wa)

 

정말 찾기 어려운 곳에서 오류가 발생하였고, 정말 긴 시간 끝에 찾아내면서 내가 E를 ac받을 수 있었다. 정말 힘들었다.

 

C solve(251 min, 3 tle)

 

puppy의 코드가 C를 한 번에 맞추면서 C도 더 이상의 페널티 없이 ac를 받았다. 정말 다행이었다.

 

팀원들의 멘탈 건강을 위해 혼자서 조용히 페널티를 계산해본 결과 프리즈 이후 E/C를 한 번 이상 틀린다면 BIG SHOT이 G를 wa 없이 한 번에 푸는 순간 우리가 지게 되었다. 하지만 우리가 둘 다 한 번에 풀게 되면서, BIG SHOT이 G를 wa 없이 268min안에 풀어야 우리를 이길 수 있게 되었다. 앞에서 BIG SHOT의 화면이 아주 살짝 보이는데, 코딩하는 화면이 아닌 문제 페이지 화면이 계속 띄워져 있어서 승리를 확신할 수 있었다. 우리가 10솔브인데, 우리를 이기려면 11솔브를 해야 하기 때문에 다른 팀이 우리를 이기는 것도 현실적으로 거의 불가능하였다. 혼자서 승리의 기쁨을 만끽하였다.

 

I 7 wa

 

kizen이 I의 증명되지 않은 풀이를 내었고, 나도 I의 증명되지 않은 다른 풀이를 조금 뒤에 내었다. 둘 모두 구현할 시간이 없을 것 같아 내 풀이가 틀린 것 같다고 대충 둘러대고 kizen이 자신의 풀이 짜는 것에 집중할 수 있게 해주었다. 결과적으로 구현에 실패하며 풀지 못했지만, kizen의 풀이와 내 풀이 모두 맞는 풀이라고 확인되었다.

 

songC의 계란탁 팀이 프리즈 이후 4솔(!!)을 하면서 우리와 공동 10솔이 되는 놀라운 성적을 보여줬지만, 우리를 이기려면 11솔을 해야했기에 1등이 확정되었다. 강력한 경쟁자로 생각했던 일본팀은 초반에 스코어보드에서 보이지 않을 정도로 말린 듯하였지만, 5등까지 올라왔다. 평균 레이팅 2600의 강팀 LCK는 C에서 말려서 높이 올라가지 못하였다. 서울대학교 팀들이 중상위권에 많이 위치하였다.

 

 

 

진짜 너무 힘들었고, 스트레스 받는 셋이었다. 시간제한도 빡빡하고, 구현할 것도 많고, 생각할 것도 많았다. 그 어떤 팀이라도 우승을 장담할 수 없고, 우승하지 못할 것을 장담하지 못하였기에 더 힘들었다. 결과적으로 우승하였기 때문에 기분 좋은 마음으로 돌아볼 수 있게 되어 기쁘다.

 

2022~3년의 나와 2024년의 나

 

모든 스포츠에 "무관"으로 조롱받는 선수들이 있다. 나는 개인적으로 그런 선수들을 그렇게 조롱하는 것을 싫어한다. 왜냐면 내가 그런 선수였기 때문이다.

 

항상 어떤 대회를 치루든 1등을 하진 못하였다. 1등한 대회가 정보올림피아드 예선같은 이상한 대회밖에 없었고, NYPC도 간발의 차로 2등, 계절학교 모의고사도 잘쳐야 2등, KOI도 시간 차이로 금상을 놓치고, APIO도 은메달, 별 이상한 일을 당하면서 1등을 놓치는 사람이 되었다. 하지만 상위 몇 명안에는 드는 학생이었고, 가장 잘하는 학생들 중 한 명이었다.

 

가장 충격적이었던 사건은 2022년 국가대표 선발고사였다. 선발고사 2일차에서 코로나19에 걸려, 10명이 넘게 푼 그 날의 가장 쉬운 문제를 못 풀고 최종 6등으로 국가대표를 한 끗차로 떨어졌다. 진짜 너무 간절했기에 39도까지 올라가는 열을 참았고, 초반 3시간에는 나름 선전했지만 마지막에는 더 이상 집중할 수 없는 상태가 되었고, 아무것도 생각이 나지 않으면서 그저 무관 기운을 이어갈 수 밖에 없었다.

 

솔직히 억울했다. 정상적인 컨디션이었다면 가장 쉬운 문제는 당연히 풀었을 것이고, 그렇다면 3등으로 IOI에 나갔을 것이기 때문이다. 별 이상한 이야기를 믿게 되었다. 내게 "무관 기운"같은 것이 진짜 있는 것인지, 이상한 생각을 하게 되었다. 대학 입시도 겹쳐있었고, 거의 1년 반동안 ps를 접었다.

 

다시 돌아온 2023년에서도 좋은 성적을 내지 못하였다. 1년 반동안 내 실력은 처참히 떨어졌고, SCPC 5등상(전국 22등)이라는 말도안되는 성적을 내었다. ICPC도 그닥 잘 하지 못하였고, 그냥 내 안의 무관 기운이 모든 것을 망치는 것 같았다. 스스로에 대한 기대치가 매우 낮아졌다.

 

2024년에는 모든 것이 바뀌었다. 아무리 내가 못해졌든 뭘 하든 당연히 같은 또래에서 강한 팀을 꾸릴 수 있었기에, 팀에게 민폐가 되지 않으려고 작년보다 노력을 더 하였다. SCPC도 3등상으로 준수한 성적을 받았다. 팀으로 나간 대회들/연습들에서 거의 모두 나의 역할을 해냈다. kizen의 고점처럼 폭발적인 퍼포먼스를 보여주진 않아도, 객관적으로 1인분 이상씩은 하였다. 팀으로 활동한 대회들에서 모두 좋은 성적을 내면서, 2024년의 마지막 대회에서 나의 무관은 깨지게 되었다.

 

그냥 너무 고맙다. 1년 전만 해도 아무런 자신감이 없던 나에게, 좋은 팀원들이 찾아와주어 진짜 나도 1등을 할 수 있다는 것을 깨닫게 해준 것이 너무 고맙다. 그리고 나도 수고했다. 작년 나의 상태였다면 내가 말아먹었겠지만, 나도 1인분을, 모두가 1인분을 하였기에 나온 성과인 것 같다. 이제 너무 스트레스 받지 말고, 내가 좋아하는 것을 하면서 즐겁게 지내고 싶다.

 

Let DaXingHao win ICPC World Finals 2024!