기타/후기

2023 ICPC Seoul Regional 본선 후기

이지이즤 2023. 11. 26. 02:32

나의 처음이자 마지막 ICPC 본선 진출!!
따끈따끈한 후기(라고 하기엔 일기에 가까운)를 써보려고 한다.

 

ICPC란?

국제 대학생 프로그래밍 대회(International Collegiate Programming Contest, ICPC)는 매년 세계 대학생들이 참가하여 실력을 겨루는 국제 컴퓨터 프로그래밍 대회이다.
대학별로 치른 예선에서 본선 진출팀을 선발하고, 각 나라별로 치른 본선에서 World Final 진출팀을 선발한다.

 

본선에 진출하기까지..

4년이 걸렸다.
1학년때부터 매년 ICPC 예선에 참가하였고, 이번 예선에서 3솔로 운 좋게 본선에 진출하게 되었다.

2023 ICPC 예선 98등 Last Register

팀명이 Last Register인 이유는
내가 4학년이라 ICPC 마지막 참가여서인것도 있고,
원래 같이하려던 팀원 한 명이 참가를 못하게되어 급하게 다른 팀원을 구하느라
마감 직전에 팀 등록 신청을 해서 그렇다.

 

참가팀 등록 및 연습경시

본선은 11월 25일(토), 예비소집은 11월 24일(금)이었다.
금요일에 수업도 있고 졸업전시회도 있었는데 둘 다 합법적으로 째고 예비소집에 갔다.(행복^.^)

'홍대 -> 홍입 -> 합정 -> 킨텍스' 경로로 갔는데 합정 버스정류장에서 ICPC 가는 분들을 많이 만났다.
어쩌다가 이야기를 하게 됐는데 전부 서울대에서 오신 분들이었다.ㄷㄷ

그리고 버스가 왔는데 자리가 없어서 그분들 중 한 분만 타게 되었고, 같이 서서 가면서 이야기를 많이 나누었다.
본선 유경험자라고 하셔서 이것저것 질문도하고 PS관련 이야기도 했다. (알고보니 루비3이셨음..)

버스에서 내려서 킨텍스까지 가면서 또 다른 서울대생분과도 이야기하게 되었는데 이 분은 서울대 ICPC 예선 1등 팀의 멤버셨다..

예전에 무한도전에서 '서울대에서 수능 만점자 찾기'를 했었는데, 그냥 지나가는 사람 붙잡으니 수능 만점자였던 에피소드가 떠올랐다. 예비소집 하기도전에 갓갓갓천재분들을 만나서 그런지 본선 기대감을 확 낮추게 되었고, '1솔만 하자'라는 마음가짐으로 대회에 임했다.ㅋㅋ

edc9566, kckc0608, leeju1013

킨텍스 도착해서 팀 등록절차(재학증명서 및 팀노트 제출)를 거치고 연습경시 전까지 대기실에서 놀았다.
누가 봐도 본선 처음 온 사람처럼 이름표 사진 찍어주고
기념품으로 받은 포켓몬 레고도 열심히 조립했다.


그 후 1시간 반정도 연습경시를 진행했다.
연습경시도 그렇고 본경시도 그렇고 물, 노트, 펜, 과자 등등 제공해준다. 

연습경시 문제는 총 3문제가 나왔는데 C번은 쉽게 풀었고,
B번은 문제 이해는 했지만 어떻게 푸는지 전혀 감이 안잡혔고,
A번은 다들 거의 못 풀었길래 눈길조차 주지 않았다.

연습경시 끝나고 바로 학교 행사에 참여했어야 해서 후딱 나왔다가
본경시 때 입을 티셔츠 받아오는 걸 깜박해서 팀원 중 한 명이 다시 뛰어가서 받아왔다.ㅎ

학교 행사 끝나고 다시 일산으로 와서 주엽역 근처에서 숙박하고 대망의 본선 날이 되었다.

 

본경시 및 시상

ICPC 티셔츠를 입고 이름표를 메니 본선에 온 게 실감이 나서 더 신났다.

주위를 둘러보니 곳곳에 익숙한 이름들이 보여서 너무 신기했다.
가서 말 걸고 싶었는데 그분들은 나를 모르시니까 부담스러워하실 것 같아서 가만히 구경만 했다.ㅎ

대기실에서 주변을 둘러보니 영어사전을 가져온 팀들이 꽤 보였다.
우리 팀은 거의 놀러 온 느낌이라 가져올 생각도 못했었는데,
다른 팀들은 얼마나 이 대회에 진심인지 느껴져서 너무 멋있었다.

 

본선은 10시~15시까지 5시간 동안 진행되었다.
12시쯤 도시락을 나눠주셔서 알아서 점심 먹으면서 문제를 풀면 된다.

코드 print 요청하면 뽑아주는 게 신기했다.

문제를 받자마자 leeju1013(나), kckc0608, edc9566 순서대로 4문제씩(A,B,C,D / E,F,G,H / I,J,K,L) 나누어서 봤다.

나는 보자마자 D가 가장 쉬운 문제일 것 같다고 팀원들에게 알렸고, kckc0608이 구현하겠다고 해서 구현을 맡기고 다른 문제들을 봤다. 
H가 쉬워 보여서 읽었는데 입력이 너무 커서 손절치고, 스코어보드를 보니 I번이 많이 풀려있어서 edc9566에게 I번 해석을 맡겼다. 그리고 D번 구현이 좀 막히고 있길래 D번에 합류해서 30분쯤 D번 AC를 받았다.

그 후 edc9566에게 I번 문제 설명을 듣고 세 명이서 I번을 고민했다.
그런데 처음에 다 같이 문제 이해를 잘못해서 엄~~~청나게 헤매게 되었다.
BFBs 개수를 만족한 city는 그냥 건너뛰기 때문에 Ci <= Ci+1을 신경 쓰지 않아도 된다고 이해했었다.
min값을 계속해서 구해야 하니 세그트리를 쓰자는 둥 빙글빙글 돌다가 우리의 논리대로라면 예제 입출력 3을 만족할 수 없다는 것을 깨달았고, 엄청난 혼란에 빠졌다.

나는 헤매는 동안 스코어보드에서 많이 풀린 G번을 읽어두었고, 팀원들에게 설명해 주니 kckc0608이 구현해보겠다고 했다.
그래서 나랑 edc9566이 I번을 다시 정.독.을 했다.
정독을 하다가 edc9566가 1<=k<=n라는 조건을 보고 I번 문제를 제대로 이해하였고, 그걸 바탕으로 다시 풀어보니 굉장히 간단한 문제였어서 허탈했다.

G번은 kckc0608이 파이썬 set의 intersect, different_update등으로 풀다가 잘 안돼서 일단 다 같이 I번을 재도전했다.
뒤에서부터 비교하는 방식으로 풀었는데, prev_a > now_b일 때만 ans++을 해주니까 3 5 / 2 3 / 1 2 같은 반례가 있어서 현재 iteration에서 나눠준 BFBs 개수를 저장하면서 올라가는 방식으로 풀었다. 다섯 번 만에 I번 AC를 받았다.

2솔을 하고 스코어보드를 보니, 우리가 안 푼 문제 중에 가능성 있는 문제는 B번과 G번이었다.
B번을 읽어보니 쉽지 않을 것 같아서 또다시 세 명이 다 같이 G번을 봤다.
카드를 기준으로 교집합, 차집합 구하는 게 아니라, 각 숫자를 기준으로 생각해 보자는 아이디어가 나왔다.
1~N 각각의 숫자마다 카드에 포함되어 있는지를 나타내는 'YYNY'같은 문자열을 저장하고, 문자열을 key로 숫자를 value로 하는 딕셔너리를 만들어서 쿼리를 처리하자는 생각이었다.

kckc0608이 파이썬으로 구현하였고, TLE가 났다.
예선에서도 파이썬 딕셔너리때문에 TLE였고 C++로 바꾸니 AC였던 경험이 있어서, 이번에도 빠르게 C++로 바꾸었고 G번 AC를 받았다..ㅋㅋ

이렇게 3솔을 하고나니 40분 정도 남아있었다. 또 다 같이 B번을 봤다.
수열을 매개변수로 받는 파이썬 수도코드 함수가 주어지고, 함수의 리턴값이 주어질 때, 매개변수로 받은 수열을 구하는 문제였다.
일단 코드를 정주행 하면서 이해하고, 밑에서부터 거꾸로 올라가면서 역으로 추적해보니 어느정도 감은 잡혔지만 시간이 많이 부족해서 결국 구현은 하지 못하고 대회는 끝이 났다. 

3솔로 마무리

처음엔 1~2솔 정도 예상했고 목표가 3솔이었어서 아주 만족스러운 결과이다.
하지만 셋이서 다 같이 한 문제를 보는 시간이 많았던 게 아쉬웠다. 2솔 후에 G와 B를 분담하여 동시에 가져갔다면 4솔도 도전해 볼 만했을 것 같은 느낌이 들었다.

우리는 팀연습도 한 번도 안 했고 ICPC 예선이 유일한 팀연습이었어서(ㅋㅋ) 중간에 앉은 사람이 구현하였는데,
다들 팀들은 컴퓨터를 책상 오른쪽으로 옮겨서 맨 오른쪽 한 명이 구현하고 나머지 두 명이 같이 의논하는 스탠스를 취하는 것을 보고 팀 연습의 중요성을 더더욱 느꼈다. 그래서 이 정도 푼 거면 운이 좋았던 것 같기도 하다. ㅎ

1등은 무려 10솔이었다. 스코어보드 까는 것도 아주 재밌었다!
그리고 예비소집날 버스에서 만났던 루비3이신 분이 금상을 수상하고 월파를 나가게 되셔서 나까지 덩달아 기뻤다.
첫 월파 얼마나 행복할까? 가늠이 안된다.

PS를 잘하고, 수상을 하고, 월파를 나가는 그런 것들이 부럽다기보다는
무언가 진심으로 좋아하는 것이 있고 그걸 꾸준히 지속하며 잘하게 되었고 즐기게 된 '그 무언가'가 있다는 것이 너무 부럽다.

본선 현장에 와서 각 지역의 특출난 사람들의 모습을 보고 분위기를 느낀 것만으로도 너무 재밌고 두근거리는 하루였던 것 같다.

 

귀가..

저녁에도 도시락을 받아서 대기실에서 먹었다.
그저 대회 참가한 것뿐인데 반팔티, 기모후드집업, 점심저녁도시락, 과자 많이, 머그컵, 보조배터리, 포켓몬 레고, 에코백, 스티커 등등 참 많이도 받았다. 완전 개꿀

집 가기 전에 스태프로 오신 롸님한테 인사하러 갔는데 어쩌다보니 shiftpsh님과 같이 택시를 타게 되었다.ㄷㄷ
우리 팀원들은 전부 홍대로 가야 했고 shift님도 홍대 경유해서 가시는데 태워주겠다고 하셔서 감사히 얻어 탔다.
예비소집날 너무 말 걸어보고 싶었던 분이었는데 이렇게 이야기를 나누게 되어서 아주 영광이었다. 

컴공 입학하고 너무 안 맞아서 매일 눈물로 밤을 지새웠던 1학년 시절에 https://shiftpsh.com/ 의 '지금까지 연 중괄호 수는 기억 못 하고 있습니다'라는 문구를 보고 굉장히 감명 깊었던 기억이 있다.
'저렇게 잘하시는 분들도 엄청난 양의 시간을 투자하시는데 나는 아직 이만큼 밖에 안 해봤으면서 왜 좌절하고 포기하려 했지?'라고 생각하며 의욕을 다졌었다. 
4학년이 되어서 ICPC 본선에서 shift님을 만나니까 기분이 묘하다. 새삼 시간 참 빠르네...

명함도 받았다! ㅎㅎ

홍입역에 내려서 팀원들과 기념사진 찍고 해산했다.
3솔하고 인당 1개씩 야무지게 챙겨 온 풍선과 함께 ^.^

지금까지 연 중괄호 수

4학년인 게 너무 아쉬울 정도로 ICPC 본선은 기대 이상으로 재밌었다! 
평소에 하지 못하는 새로운 경험이다 보니 더 그렇다.

고3 때는 수능이 인생의 전부인 것처럼 살았지만 대학에 와보니 아니었고,
홍대 다닐 때는 우물 안 개구리였지만 ICPC 본선에 와보니 또 새로운 세상이 있는 것 같다.

본선도 이렇게 재밌는데 PS 잘하는 사람들에게 월파는 얼마나 재밌을까???
그들이 사는 세상... 궁금하군..