Computer Science/Problem Solving

2024 ICPC Seoul Regional 본선 후기

리유나 2024. 11. 27. 13:27

안녕하세요. 리유나입니다.

11월 22일부터 23일까지 2024 ICPC Seoul Regional 겸 제 24회 전국 대학생 프로그래밍 경시대회를 치르고 왔습니다!

저희 팀은 작년, 재작년과 같은 멤버로 팀명만 다소 변경된 Gyerantak(계란탁)으로 참여했고, 교내 1등, 전체 2등이라는 괄목할만한 성과를 냈습니다. 저의 정말로 진짜진짜 마지막 ICPC에서 우승을 하지 못한 것은 살짝 아쉽지만, 그럼에도 너무나도 뿌듯한 성과라서 아주 기쁩니다!

 

저희 팀에 대한 이야기는 이미 이 블로그에서 정말 많이 했으니, 대회 준비 과정과 진행 과정에 대해서만 간략히 설명하겠습니다.

 

0. 대회 이전

매주마다 팀연습을 하고 복습하는 거야 뭐 당연하고, 모두의 컨디션 조절을 위해서 드디어! 각자 집/숙소에서의 숙박이 아닌 합숙을 결심했습니다. 예비소집이 끝나자마자 총알같이 달려가서 셋 하나 돌고 자고, 심지어 mhy908은 아침에 일어나서 플래 문제 몇개를 푸는 식으로 뇌를 깨우겠다고 했는데 이 전략이 아주 잘 먹혀들어갔습니다. 다음에는 저도 한번 해봐야 겠어요.

 

킨텍스에서 하필 대회날 블루아카 콘서트와 던파 온리전까지 다같이 벌여버리는 바람에 아주 행사장이 혼돈의 도가니가 되어버렸습니다. ㅋㅋㅋㅋㅋ.... 돌아가는 3호선 열차가 정말 힘들었던 기억이네요....

 

1. 본선 타임라인

본선 타임라인을 정리해 보면 다음과 같은 식으로 대회가 진행되었습니다.

 

(시작) 저희 팀이 앞/중간/뒤를 보는 규칙이 대강 정해졌습니다. SongC가 앞, mhy가 중간, 제가 뒤를 보며 동시에 SongC가 키보드를 잡고 시작합니다. 이번에도 역시 이 방법대로 진행했습니다.

 

(15분/28분) SongC가 A, B 모두 간단하다고 선언 후 차례차례 구현해서 AC를 받았습니다.

 

(38분) 제가 L을 구현하고 AC를 받았습니다.

 

(50분) (제 기억이 맞다면 mhy가) J를 구현하고 AC를 받았습니다.

 

그러나 여기서부터 이제 조금 큰 수렁에 빠지기 시작했는데, SongC가 C의 풀이를 상당히 빨리 깨달았지만, WA가 나오는 코드를 작성했습니다. 이쯤에서는 뭐 홀의 결혼정리를 잘못 짰겠거니, 내지는 매칭 포문 무지하게 길게 적으면서 실수했겠거니 정도로 넘겼지만 사실 여기서부터 크나큰 스노우볼이 굴러갔는데...

 

(126분) mhy가 H를 구현하고 정말로 놀랍게도... 이 문제를 한번에 AC를 받았습니다. 이런 트리DP문제를 어떻게 하는건데 대체...

 

(141분) mhy가 "야 이거 G 팀노트에 있는거 그대로...어 아니네? 팀노트는 팰린드롬 최소인데 문제는 최대야"라고 해서 응용할 수 없는 문제인가 하고 봤는데, 자세히 보니 문제도 그냥 최소고, 정말로 그냥 팀노트에 있는 EerTree를 그대로 들고오면 되는 문제였어서, 코드를 그대로 옮겨 적고 AC를 받고 FA를 했습니다. 솔직히 저희가 꿀빨긴 했지만 이런 문제가 나와도 되냐구요 ㅋㅋㅋ...

 

이때쯤에 F를 푸는 팀들이 제법 나오기 시작했고 F는 구성적 문제였기 때문에 제가 F를 보기 시작했습..니다만 거기서 아주 큰 정병이 시작되었습니다.

 

슬프게도 이 상태로 대략 210분이 될 때까지 C 디버깅/나머지 문제 풀이 정도에서 아무런 진행이 되지 않았습니다.

 

저는 F의 구성을 엄청나게 고민하고 있었는데, 도저히 3/4n^2에서 줄일 수가 없어서 다른 팀들이 쭉쭉 올라가는 걸 보고 굉장히 자괴감에 빠졌던 기억이 납니다. 그나마 n이 100 이하인 걸 이용해서 3/4n^2 - 5n 정도로 바운디드 될 수 있는 해를 어떻게든 구축했고 SongC가 구현을 하겠다고 했지만, 이 구현 과정에서도 엄청나게 많은 문제가 발생하고, 심지어 100일때의 해가 나오는데 99일때는 오류가 나와버리는 바람에... 1페널티를 쌓고, 저희는 또 이렇게 말려서 대회를 망치는 거 아닌가 하고 큰 걱정을 하기 시작했습니다. 프리즈 당시 6솔브로 8등?이었던 걸로 기억합니다.

 

그러나 프리즈 직후부터 반전이 시작되었는데요

 

(233분) SongC가 K dp 엄청 간결하게 나온다고 선언한 뒤 풀이가 타당함을 밝혔습니다. 정말 3분?만에 K 코딩을 완료하고 AC.

 

(242분) 도대체 어떻게 해서 된 건지는 아직도 모르겠지만, 헛돌고 있는 F 코드에서의 일부의 조건을 조금 더 strict하게 바꾸는 식으로 변형 후 AC. 정말 이 문제 때문에 정신 나가는 줄 알았어요.

 

이 상태에서 남은 문제는 mhy가 구현하면 TLE, SongC가 구현하면 WA가 나오는 C와, 더럽고 복잡한 기하 문제인 E 정도가 풀이가 나온 상태였습니다.

 

E의 경우에는 깔끔한 풀이를 찾았다고 생각하고 제출했는데 틀리고, 이걸 계속 생각해보니 무려 마우솔레움 위쪽 바깥이 아니라 아랫쪽, 왼쪽, 오른쪽 아래 등 별의 별 이상한 케이스들이 다 가능하다는 점이 문제였습니다. 이런 예외들을 전부 다 조금씩 처리했음에도 WA가 나오다가, mhy가 어떤 부등호 하나를 고치고는 272분 경에 갑자기 AC를 받았습니다.

 

마지막 남은 것은 C였는데, 아무리 생각해도 맞는 풀이인 것 같은데도 도저히 답이 안 나오고, 그런 상태로 종료 3분전까지 몰리게 되었습니다.

 

그런데 그때쯤 mhy가 볼현듯 지나가듯 '야 근데, 너 그거 고를 때 색칠 안된 점인 거 확인하는 부분 어디있냐?'라는 질문을 했고 그 질문이 우릴 살렸습니다.... SongC는 색칠 안된 점을 골라야 한다는 조건을 인지하지 못하고 있었기에 그 부분을 구현하지 않았던 것이었고, 그것 때문에 진즉 200분 정도 먼저 맞을 수 있었던 문제를 계속 고생하고 있었습니다. 이후 그걸 판정하는 코드 딱 하나를 추가하고, 298분에 기적같이 AC를 받게 되었습니다.

 

(종료) 대회가 종료되었습니다.

 

2. 대회 후 타임라인

프리즈 이전 6솔브, 이후 4솔브라는 어마무시한 변태스탯을 찍었고, DaXingHao나 BIGSHOT과 같이 순위 경쟁을 해야 하는 팀들과의 이후 대화에서 약간의 블러핑이 오가는 등의 일이 있었습니다. 저희 팀은 모두 C를 풀지 못하고 9솔로 마무리했다는 블러핑을 하기로 합의를 했었습니다....

 

BIGSHOT은 스코어보드 상 9솔인 것이 거의 확실해서 큰 걱정은 하지 않았고, DaXingHao에서도 9솔브를 했다고 말은 했지만 정황상 블러핑일 것 같았어서 크게 믿지는 않았지만, 그래도 내심 정말로 9솔브라면 얼마나 좋을까, 그렇다면 우리 팀이 우승인 게 거의 확정일텐데...하는 생각을 했었습니다.(ㅋㅋ)

 

결론적으로 DaXingHao가 9솔브 했다는 것역시 블러핑이었고, 저희는 같은 10솔브지만 298분의 패널티 차이로 아쉽게 2등에 머물게 되었습니다. 스코어보드 프리즈 이후에 기적적으로 문제들을 밀고 2분 남긴 시점에서 AC를 받는 등의 대격변을 일으켰으니, 이 이상 바라는 건 욕심이었겠지만 말이죠 ㅎㅎ...

 

여하튼 스코어보드 개봉식이 저희에게는 정말로 재미있었는데, 한번 영상 보시고 가시죠!

 

https://youtu.be/cEOGSgoUidI?t=2740

 

45분 40초부터, 20등에서 출발해서 2등까지 올라가는 기적의 스코어보드 개봉을 맛보고 도파민에 크게 절여졌습니다 ㅎㅎㅋㅋㅋㅋㅋㅋㅋ.... 마지막에 DaXingHao E 정답 나오는 것 보고는 팀원 모두가 큰 좌절을 했던 게 생각나네요...

 

3. 수상, 및 그 이후

참고로 이번 대회에는 지난 UCPC처럼 어떻게든 세일러복을 안에 입고 카라만 빼서 왔습니다 ㅋㅋㅋㅋ... 마지막 ICPC이니만큼 꼭 해보고 싶었네요!

이쪽은 자랑스러운 팀원들과 같이 찍은 금상 수상 사진입니다! 공식 사진도 올라오면 나중에 공유드리겠습니다! ㅎㅎ

 

이것으로 저의 한국 리저널은 졸업이지만, 아직 해야할 일들이 많이 남았습니다.

 

우선 2월 말 싱가포르에서 치뤄지는 아시아 태평양 플레이오프를 나가야 합니다. 작년에는 플레이오프 룰이 새로 추가되었음에도 펭귄이 1등을 하는 바람에 플레이오프를 못 나갔던 것이 너무나도 한스러웠는데, 이번엔 되레 플레이오프 룰이 없었더라면 넉넉하게 월파를 갔을 성적이지만 플레이오프를 거쳐야 한다는 게 참 아이러니하네요 ㅋㅋ

 

그때까지 팀원들이 계속해서 합을 맞춰서 잘 연습하고, 싱가포르면 또 반년간 교환학생을 다녀온 저한테는 반쯤은 홈그라운드나 다름없으니(??)홈 어드밴티지를 잘 이용해서(????)치르면 문제 없지 않을까 생각합니다. 다만 신입생 팀인 BIGSHOT이 정말로 만만하지 않은 팀이라는 점이 이번에 드러났으니만큼, 철저히 만반의 준비를 거듭토록 하겠습니다.

 

그 다음은 아르메니아에서 열리는 월드 파이널이겠네요. 이때쯤에는 이미 제가 대학원생일 거라서 어떤 삶을 살고 있을지 짐작이 가질 않습니다만, 그것까지 다녀오고 대학생 대회 출전을 위한 PS는깔끔하게 마무리짓고 싶네요!

 

다만 취미로서의 competitive programming은 아무래도 조금씩이나마 계속하지 않을까 싶습니다. ㅎㅎ 여전히 정말 좋아하는 일이니까요! 아울러 뒤를 따르는 후배들을 양성하는 일에도 조금이나마 보탬이 되고 싶다는 생각을 자주 합니다!(어쩌면 내년에는 다른 팀의 코치로 다시 대회에 나갈 수도 있을 것 같네요 ㅋㅋ)

 

마지막 ICPC 리저널에서 이정도의 성적을 거둘 수 있게 3년간 같은 팀으로 함께해준 존경하는 SongC와 mhy908 후배님들에게 다시 한번 진심으로 감사의 뜻을 남기며, 앞으로도 더욱 열심히 정진토록 하겠습니다!

 

4. 반성

이번 대회에서 느낀 정말 큰 제 문제점은, 저의 포지션이 아무래도 수학 구성적 등을 위한 조커픽에 가까워서, 제가 활약할 수 있는 문제 스타일이 많이 나오지 않은 셋이라면 후반의 제가 할 일이 정말 없어진다는 점이 있겠네요. 이번 셋이 정말 딱그랬습니다. L이랑 F 풀면 제가 유리한 문제는 없다시피 했어요...

 

그런데 심지어 구성적인 F조차도 말려서 크게 꼬이고, 그리고 남는 시간동안은 제가 할 수 있는 게 없고 바쁘게 짜는 다른 팀원들에게 도움이 될 수도 없다는 생각에 멘헤라가 크게 와서, 화장실에서 헛구역질을 하고 올 정도로 멘탈 관리는 역대 최악으로 망쳤습니다. SongC가 적당한 퍼포먼스를 내고 mhy가 그야말로 신들린 퍼포먼스를 내 주었기에 2등이 가능했던 거지,(SongC와 mhy는 우리 둘이었으면 F는 4시간 걸려도 못 풀었을 거라고 복돋아주긴 했지만)냉정하게 말해서는 제 역할이 아주 미미했다고 생각합니다.

 

물론 조커픽이니 그런 것만 잘 하면 되는 거 아니겠느냐 하고 생각하고 말 수도 있겠지만, 그럼에도 최선을 다하고 팀에 도움을 주는 것이 제가 할 수 있는 가장 큰 역할이라고 생각합니다. 플레이오프가 되기 전까지 객관적인 실력도 더욱 키워서 조커픽으로서의 역할 이외에도 문제를 무난히 잘 풀 수 있도록 연습하고, 특히 기하학과 같이 구현이 많고 처리해야 할 것들이 많은 부분은 저 또한 배경 지식은 상당히 있으니 이런 문제들의 디버깅을 잘 도울 수 있도록 노력하겠습니다! 제가 가장 벽을 느낀다는 건 다르게 말하자면, 제가 실력을 눈에 띄게 늘린다면 저희 팀 또한 실력을 크게 올릴 수 있다는 뜻이니까요!

 

5. 아무래도 좋을 이야기들

예비 소집날 저희 팀 팻말이 어째서인지 계속해서 떨어지고, 마우스는 아무리 세게 눌러도 잘 눌러지지 않는 고장이 나고(사실 제가 눌렀을 때는 다 잘됐는데, 리겜 근육때문일 거 같습니다.)본선 당일에는 의자를 통과해서 전원선이 지나가서 의자를 자칫 잘못 빼면 컴퓨터가 다 꺼질 위험이 있는 배치가 되는 등 각종 이상한 징조들이 저희를 엄습했습니다. 신경 안 쓰려고 했는데, 계속 떨어질 때 스태프 분께서 "좋은 징조일 거예요 ㅎㅎ..."하고 말씀주셔서 괜히 더 신경쓰게 돼서 으아악!!! 싶었는데, 뭐 결국 대회는 잘 마무리했으니 아무렴 좋습니다. 오히려 길조라고 받아들이려구요.

 

E번 마우솔레움 문제를 윤교준님이 해설하시면서 "참고로 이건 모솔레엄이라고 읽고 위대한 사람의 묘지를 뜻하는 말이고,,, 아마 다들 들어보신 적 없을 거예요"라고 했는데, 문명 5에서 할리키나소스의 마우솔레움을 수백번씩 지어본 저와 SongC는 "들어본 적 없을 리가 있냐!!!!! 마우솔레움이지 모솔레엄이머냐!!!!"하고 그랬던 기억이 나네요

 

이번 ICPC는 유난히 외침이 많았는데, 한국 리저널이 다른 리저널들에 비해서 해외 팀들에게 상당히 불친절하다는 인상을 깊게 받았습니다. 대회 이후 기업 세션이나 심지어는 문제 풀이 마저도 전부 한국어로 진행되는 바람에, 해외 팀들이 대부분 이런 점에서 아쉬워했던 걸 봤습니다. 외침 뿐 아니라 과기원의 외국인 팀들도 있고 하느니만큼, '한국어를 할 수 없고 영어만 할 수 있는 상황'에서도 정보량의 차이는 없어야 한다고 생각이 드는데, 이런 점에서 많이 아쉽고 또 해외에서 기껏 와준 팀들에게 미안하기도 했습니다.

 

도쿄공대 아마츠카제 팀의 코치님, 그리고 대만대 R-12팀 팀원 중 한명이 저랑 어느 정도 아는 사이였어서, 만나서 인사드리고 짧게 이야기를 했는데 너무 신기한 경험이었네요 ㅎㅎ... 일본어로 말하는 거 정말 오랜만이라 너무 버벅거렸던 게 아쉽네요 ㅠ 저희 또한 외침을 가고 싶었으나 돈과 시간과 신청 타이밍과 같은 사정의 문제도 그렇고, 결론적으로 외침 안해도 딱히 상관없을 성적을 내버렸기 때문에 싱가포르 갈 준비를 열심히 하고, 거기서 이번에 만났던 해외 팀들을 다시 만나보고 싶네요!

 

세일러복을 입고 대회장을 활보해서인지, 모 스태프 분께서 "헉 혹시 리유나님...이신가요?! 세일러복 입고 대회 오실만한 분은 리유나님 뿐이실것 같았어요!!! 저 제가 일방적으로 아는 사이지만... 화이팅이에요!"라는 엄청난 응원을 받아버렸습니다. ㅎㅎ 이블로그 글 보실지는 모르겠지만 정말 많이 힘 났어요. 감사드려요!

 

그리고 다른 모 지인분은 예비소집 날 "어라 웬일로 평범하게 옷을 입고 오셨네요?!"라는 말씀을 저한테 하셨고 제가 "내일은 또 모르죠 ㅎㅎ"라고 답하고, 그다음날 보란듯이 세일러복을 입고 오니 "오늘은 역시 평범하지 않게 옷을 입고 오셨네요'라고 말씀하셨어서 이것도 또한 기억에 남네요 ㅋㅋ... 대회장에 세일러복 입고 가는 것도 이제는 그냥 추억이 되겠네요.

 

저는 이번 수상을 통해서 19년 장려상, 22년 동상, 23년 은상, 24년 금상이라는 진기록을 세우게 됐습니다 ㅋㅋㅋㅋㅋㅋ... 내년에 또 나간다면 대상이겠지만 어차피 대학원 진학도 하는 데다 이미 5회 출전을 채워서 더는 못 나가고, 여기서 더 나가면 정말 추접한 선배가 되는 것 같으니(??)깔끔히 은퇴하고 코치로서 친한 후배들을 이끌고 싶습니다!

 

말이 나와서 말인데, 내년의 문송송은 아마도 공중해체가 될 듯합니다. 3년간 동일 로스터로 정말로 힘썼고 이제 같은 팀의 후배들에게 너무나도 정도 들고 많이 고맙지만, 플레이오프와 월드파이널 이후로는 정말 좋은 추억의 영역으로 남겨 둬야겠네요 ㅎㅎ... 문송송의 다른 문은 내년에 병역을 이행하러 가고, 아마 남은 송이 다른 두명과 팀을 이루려고 하는 것 같습니다. 좋은 팀원들이니만큼 무난히 우승권을 바라볼 수 있지 않을까 싶네요. 제가 장려-동-은-금을 연속으로 받은 기운을 이어받아서 까짓거 내년에는 대상을 받는 모습을 보고 저 또한 같이 기뻐하고 싶습니다!

 

앞서 말했지만 PS 자체를 접지는 않을 듯합니다. 수학 관련된 분야로나마 조금씩 취미로 계속하고, 후학 양성을 하는 코치로서 계속하고 싶다는 생각을 종종 하는데, 그에 걸맞을만한 실력을 끌어올리는 것이 제일 중요하겠네요.

 

읽어 주셔서 감사합니다!