운좋게 ICPC 본선에 진출하게 되었다.
처음 ICPC를 갔다오면서 경험했던 것들을 글로 정리하고자 한다.
ICPC 예선
사실 그 동안 ICPC라는 대회의 존재는 알고 있었는데, 이제야 나가게 되었다.
원래 같이 나가려고 했던 팀원 분 중에 한 분이 왜인지 나이제한에 막히시는 바람에 다른 팀원을 구해서 같이 나가게 되었다.
예선은 학교 멀티미디어실에서 진행했다.
개인노트북을 지참하고, 멀티미디어실에 있는 모니터에 연결해서 문제를 풀었다.
이때 팀노트는 따로 사용하지 않았고, 노트북 한대에 키보드와 모니터를 연결하고, 노트북 화면은 꺼둔채로 교수님 감독하에 대회를 진행햇다.
ICPC 예선은 문제지 중 일부가 한국어로 나와서, 한국어 문제를 보고 빠르게 풀려고 노력했다.
팀원 중에서 내가 제일 구현을 익숙하게 해서 내가 가능하면 구현을 담당하고, 나머지는 같이 아이디어를 고민하고 구현 방향을 논의하는 방식으로 진행했다.
구현할 때는 2명이서 페어프로그래밍으로 구현하고, 나머지 한명이 다른 문제를 고민하는 식으로 했다.
제한된 시간 내에 많은 문제를 풀어야 하는 대회에서 사용하기에 별로 좋은 방법은 아니지만, 우리는 "어차피 많이 못 푼다. 다같이 들러붙어서 풀 수 있는 문제라도 제대로 풀자" 라는 마인드로 임했다.
3솔을 하고 다른 한 문제를 이게 왜 TLE를 외치다가 못 풀었다.
예선에서도 그렇고, 본선에서도 그렇고, 파이썬 딕셔너리 (C++ map) 을 이용해서 구현해야하는 문제가 나왔었는데,
맵을 이용해야하는 구현에서는 파이썬이 너무 느려서 C++로 다시 짜서 맞췄다.
이때 시간을 많이 버렸던 것이 아쉬웠다.
그 동안 SUAPC나 UCPC는 항상 온라인으로 진행하였다보니 각자 컴퓨터로 문제를 푸는 경험만 해봐서 컴퓨터 한대로 문제를 푸는 상황이 정말 어색했다.
문제지를 읽다가 어떻게 풀어야 하는지 아이디어가 생각나서 빨리 구현해보고 싶은데, 아직 다른 사람이 구현하고 있을 때 온라인으로 할 때와는 달리 바로 구현을 못 해보는 게 불편했다.
그래도 컴퓨터 한대를 두고 문제를 풀면서 자연스럽게 '페어 프로그래밍' 을 해보았는데, 이게 생각보다 도움이 많이 되어서 좋았다.
구현하는 과정을 옆에서 지켜보고, 옆에서 왜 이렇게 구현했는지 질문할 때마다 설명하면서 구현하니 실수를 줄이면서 구현하기가 좋았다.
그리고 구현 과정을 모두 보고 이해한 사람이 있으니, 중간에 구현 중 논리의 허점을 말해주면서 실수를 잡아주기도 해서 문제 하나 하나를 같이 힘을 합쳐 해결했다는 뿌듯함도 느껴져서 좋았다.
ICPC 예비소집
11월 24일 금요일, ICPC 예비소집이 있었다.
학교 수업을 빼고 가야해서 걱정이 조금 들기도 했는데, 예비소집은 안 갔으면 클날뻔했겠다는 생각이 들었다.
오전에 전공 정리를 하고, 점심을 먹고 팀원과 같이 예비소집 장소인 일산 킨택스로 이동했다.
예비소집은 1시반부터 3시 사이에 등록을 진행하고, 3시반부터 5시까지 연습 경시를 치루는 일정으로 진행되었다.
킨택스를 가기 위해 합정역에서 M7731 광역버스를 타려고 기다리고 있었는데,
다른 여러 사람들이 우르르 M7731버스 줄 얘기를 하길래 다른 인싸 팀원이 먼저 가서 인사하고 어느학교인지 물어봤다.
그리고 알고보니 다 서울대팀이었다..
왜 서울대가 여기있나 궁금했는데, 알고보니 킨택스가 접근성이 그렇게 좋지 않아서, 우리집에서도 서울대에서도 모두 합정역에서 M7731 광역버스를 타고 이동할 수 밖에 없었다.
암튼 버스가 도착해서 버스틀 탔는데 자리가 없어서 서서가게 되었고,
같이 타려던 서울대 팀 일부는 버스를 못타게 되었다.
그런데 같이 버스를 타게 된 다른 서울대 참가자 분이 먼저 말을 걸어주셔서 같이 이야기를 하며 가게 되었다.
작년에도 ICPC를 나가보셨다고 하셔서 이것 저것 물어봤다.
ICPC 점심은 뭐 나오는지, 대회 환경은 어떤지, 문제 스타일은 어떤지 등등
그리고 궁금해서 혹시 티어가 어디인지 물어봤는데, Solved.ac 43등, 루비3 네임드 PS러이신 jhwest2 님이었다.
(분명 예비소집날 검색해 봤을 땐, 44등, 루비5였는데 지금보니 더 올라와 계셨다..)
.
마지막에 버스 내리면서 인사할 때, 다른 팀원이 "꼭 수상하시길 바라요!" 했는데, 그 분이 그냥 멋쩍게 웃으시자 옆에 있던 다른 서울대 팀 분이 "얘는 무조건 수상권이라서 월드 파이널 가는게 목표에요" 라고...
참고로 본선 대회에 서울대가 8팀이 진출했는데, 서울대는 8팀 모두 수상권에 있었던 것으로 기억한다.
앞으론 서울대 팀을 만나면 어떤 팀이든 월파 가시길 바란다고 인사해야겠다ㅋㅋ
아, 그때 버스에서 이번 ICPC 팀명을 여쭤봤는데, New Trend 라는 팀으로 참가하셨다고 한다.
이 분이 속한 팀은 (대만팀을 뻬고) 대회 2등을 하셔서 금상 (국무총리상, 300만원 상금) 을 수상하셨다.
아마 2등이면 원하시던 월드파이널에 진출하시지 않을까ㅎㅎ
그리고 버스에서 같은 고등학교 선배를 우연히 만나서 같이 얘기하면서 이동했다.
SUAPC와 신촌 연합 알고리즘 캠프에서 만났던 분을 보니 굉장히 반가웠다.
킨택스로 이동해서 재학증명서를 보여주고, 팀노트를 운영진측에 맡긴다음 대기실에 들어갔다.
대기실 뒤에는 다과가 있어서 자유롭게 과자를 먹을 수 있었다.
예감, 미니 오예스, 칙촉, 고소미, 빈츠 같은 과자들이 있었다.
밖에서는 후원기업인 화웨이에서 작은 포켓몬 레고를 나눠주고 있었다.
대기실에 다들 모여서 집중하며 포켓몬을 만들고 있는 모습이 굉장히 신기해서 우리팀도 바로 포켓몬을 가지고 와서 조립했다.
각각 피카츄, 코일, 콘팡이 걸렸는데, 콘팡이 걸렸던 팀원은 부품이 몇 개 없는 불량품이 걸려셔 굉장히 아쉬워했다.
그래도 다 만들고 나니까 꽤 포켓몬이 예쁘게 만들어져서 마음에 들었다ㅎㅎ
예비소집에서 많은 사람들을 봤는데, 그 중에 우연히 solved.ac 를 만드신 박수현님을 멀리서 발견하여 (정확히는 발견한 팀원이 알려줘서) 너무 신기했다.
그 밖에도 나정휘님 같은 PS 네임드 분들이 많이 오셨다고 해서 아주 두근두근?했다.
대기실에서 대회 관련 설명을 조금 듣고, 대회장으로 이동했다.
오늘은 연습이라 대회장에 휴대폰을 들고가도 괜찮았다.
컴퓨터는 GUI가 있는 우분투가 설치된 컴퓨터가 있었다.
책상에는 인당 하나씩 볼펜 하나, 물 한병, 옥스퍼드 메모지 하나가 놓여있었다.
그리고 책상 위에 각 팀명이 적힌 팻말과, 사용할 팀계정 정보가 있었다.
이렇게 모니터, 키보드, 마우스, 연습장, 볼펜이 있고, 우측에 팀명이 적힌 팻말이 있었다.
예비소집때는 32번 팀으로 참가하여 team032 이런 아이디를 사용해 우분투도 로그인하고 ICPC채점 사이트인 DOM Judge 사이트도 로그인하였다.
한가지 당황스러웠던 점은 GUI 우분투를 처음 사용해봐서 어떻게 인터넷 브라우저를 키는지도 몰랐었는데, 그 어디에도 안내 사항이 없었다는 점이다.
42서울을 처음오면 아무것도 안알려주고 동료끼리 학습해야한다는데 그게 이런 느낌이려나 싶었다.
다행히 왼쪽 위에서 Application 이라는 메뉴를 발견했고, 해당 메뉴 안에서 브라우저 프로그램을 찾을 수 있었다.
그런데, 그 다음 고비는 DOM Judge 사이트를 접속하는 일이었다.
브라우저에서 icpckorea.org 같은 사이트를 아무리 접속해봐도 접속이 안되는 것이었다.
그런데 안내지에는 DOM Judge 사이트를 접속해서 제출이 잘 되는지, 프린트가 잘 되는지 테스트 해보라고 해서 당황스러웠다.
이것도 왼쪽 위에 Application 메뉴에 들어가서 Contest 항목에 들어가니 DOM Judge 사이트가 있었다.
그 밖에도 Doument 항목에 C++, Java, Python 언어의 Document가 정리되어 있었다.
IDE는 파이참, CLion, vscode, IntelliJ, emarcs 같은 유명한 에디터들이 다 설치되어 있었다.
나는 익숙한 파이참을 이용했고, 기본 세팅이 다 되어 있어서 새 프로젝트를 만든 뒤, 바로 코드를 실행해볼 수 있었다.
이렇게 우분투 환경에 적응한뒤 한시간 반동안 3개의 연습문제를 풀었다.
문제는 모두 영어로 되어있었는데, 내가 영어에 약해서 해석이 너무 어려웠다.
팀원들이 각자 하나씩 읽었는데, 그 중에 제일 쉬워보이는 문제를 하나 잡아서 1시간에 걸쳐 풀고, 나머지 하나를 다같이 붙들어 맸으나, 그 문제는 결국 풀지 못 했다.
3시반부터 5시까지였는데, 6시에 학교에서 '컴공인의 밤' 이라는 공식 행사가 있어서 4시 40분쯤 일찍 나왔다.
그런데 급하게 나오느라 수령해야할 물품을 못 받고 가서 이리 뛰고 자리 뛰어서 간신히 수령물품을 받았다.
수령 물품은 ICPC 에코백안에 대회날 입어야 하는 반팔 티셔츠와 보조배터리 (C타입) 기념품,
그리고 프로그래밍 대회하면 빠지지 않고 주는 노트북 데코용 스티커까지 받았다
짐을 바리바리 들고 컴공인의 밤 행사까지 즐긴다음, 밤 10시에 다시 일산으로 이동했다.
아침에 일산을 다시 가는 건 정신이 없을 것 같아서 미리 일산에 숙소를 잡아두었다.
그리고 많은 대회 참가자들이 이렇게 하는 것 같았다.
숙소에 돌아와서 씻고 다음날 일찍 일어나야 해서 거의 바로 잤다.
ICPC 본선
준비한 티셔츠가 반팔이라 속에 반팔을 입고, 그 위에 여러 옷을 껴입은 다음 킨택스로 이동했다.
본선에는 예선과 다른 팀번호를 부여받고, 연습 경시때와 다른 위치의 컴퓨터에서 경시를 치루게 되었다.
본선 대회장에 도착해서 명찰 목걸이를 받고 대기실로 이동했다.
다른 사람들이 티셔츠를 입은 걸 보니, 반팔 그대로 입은 사람도 있고, 긴팔 옷 위에 입은 사람도 있었다.
나는 추울 것 같아서 화장실에서 긴팔 위에 티셔츠를 입도록 갈아입고 왔다.
대기실에 짐을 풀고, 어제 미리 챙겨둔 과자를 주섬주섬 먹으면서 안내 설명을 듣다가 대회장으로 이동하게 되었다.
대회장에 입장할 때는 주머니를 스태프에게 검사받고 입장하게 되었다.
초 슈퍼 네임드이신 롸님에게 검사를 받아서 영광?이었다 ㅋㅋ
예선과는 달리, 이번엔 다과가 대회장 안에 있었는데, 대회중에 마음대로 이동하면 실격이라 다과를 미리 넉넉히 챙겨두라고 해서 정말 넉넉하게 챙겨왔다.
자리에는 본선때와 마찬가지로 물 한병씩과 연습장 하나, 볼펜 2개가, 문제지가 들어있는 봉투, 팀노트가 들어있는 봉투, 대회 계정 안내 종이가 있었다.
9시 30분부터 컴퓨터 세팅이 시작되었는데, 어제와 달리 컴퓨터에서 한글이 입력이 안되서 굉장히 당황스러웠다.
사실 한글 쓸 일이 많지는 않지만, 코드에 주석을 남겨가면서 코딩하면 의외로 유용했어서 사용하고 싶었던지라 스태프의 도움을 받아 한글을 활성화했다.
(누가 언어 설정에서 한국어를 없애놨더라..)
대회장 앞에는 풍선들이 색깔별로 우수수 떠 있었다.
ICPC에서는 문제를 풀 때마다 그 문제에 맞는 색 풍선을 준다고 말로만 들었는데, 실제로 보니 너무 신기했다.
대회가 시작되면 시작하기 5초전에 짧은 노래가 나오면서 대회 시작을 알렸다.
본선 문제는 12문제였고, 우리는 각자 4개씩 보기로 했다.
4개씩 후루룩 읽는데, 다른 팀원이 D번이 쉬워보인다면서 나에게 주었다.
쓱 읽어보니까 그냥 깡 구현인데 조금 귀찮아보였다.
그래도 일단 깡구현은 맞추라고 준 문제라서 이 문제부터 잡고 다른 팀원들이 마저 다른 문제를 읽어보기 시작했다.
문제를 일고 이해한다음 코드를 짜기 시작했을 때도, 스코어보드에 맞춘 사람이 없어서 "혹시.. 내가 퍼솔?"하는 기대를 아주 잠깐했는데, 내 구현 실력이 부족해서 구현에 시간이 오래 걸리는 바람에 30분만에 문제를 풀게 되었다.
그 사이 스코어보드에는 무수히 많은 D와 다른 문제들이 찍혀있었고, 스코어보드를 따라서 다른 문제들을 보기 시작했다.
다음으로 본 문제는 I 번 문제였다.
지금 생각해보면 간단한 그리디 문제였다고 생각하는데, 문제 조건을 하나 잘못 봐서 예제 입력이 왜 이렇게 나오지..? 하면서 거의 1시간을 쌩으로 버려서 너무 아쉬웠다.
문제를 제대로 이해하고 나서도 다른 팀원이 생각한 아이디어로 구현했는데, 계속 틀리다가 반례를 찾아서 어떻게 해결을 해야하나 고민을 하고 있던차 점심시간이 되었다.
점심은 스태프들이 직접 자리로 도시락을 가져다 주었다.
도시락보다는 '런치박스'라고 하는 말에 걺랒게 하얀색 박스 안에 샌드위치 하나, 샐러드하나, 호두 브라우니, 오렌지 주스, 쿠키가 하나 들어있었다.
나는 호두는 별로 안좋아하고, 쿠키는 안 끌려서 샌드위치와 샐러드만 먹었다.
안 그래도 배고파서 집중이 잘 안되던 차에 식사를 하고나서 다시 문제를 고민해보니 간단한 풀이가 생각나서 그걸로 구현해 제출했다.
그럼에도 한번 더 틀렸었는데, 구현하는 동안 같이 페어프로그래밍한 다른 팀원이 실수를 찾아줘서 결국 AC를 받을 수 있었다.
그 다음으로 푼 문제는 G번 문제였다.
처음엔 문제 조건이 많아서 비트마스킹을 쓰니 마니 하면서 고민을 엄청 많이 했다.
고민하는동안, 그냥 나이브하게라도 구현해보자 하면서 set 내장 클래스와 연산을 이용해서 구현을 하다가 막혀서 이상한데 시간을 또 버리고 말았는데, 그 사이 다른 팀원이 딕셔너리를 2개 이용하면 어떠냐고 아이디어를 제시해줘서 그 풀이로 구현을 시작했다.
문제가 복잡해서 구현에 조금 애를 먹었는데, 어떻게 어떻게 구현을 하고 제출을 해봤는데, 결과는 TLE..
시간을 어떻게 줄이지 고민하다가, 예선에서 파이썬 딕셔너리 때문에 문제를 못 풀었던 기억이 나서 혹시..? 하는 마음올 C++로 바꿔 제출해보니 AC를 받을 수 있었다.
그냥 C++로 갈아탈까 하는 생각을 한번 더 하게 된 계기였다...ㅎ
3솔을 하고나니 남은 시간은 40분
일단 4솔한 사람들이 B번을 많이 풀었길래 B번 문제를 봤는데, 처음보는 유형이라 너무 당황스러웠다.
갑자기 파이썬 수도 코드로 작성된 함수를 던져주고는, 이 함수에 양수 수열이 리스트로 들어오고, 결과로도 양수 수열을 출력한다. 이 상황에서 입력으로 함수의 실행결과로 나타난 양수 수열이 주어질 때, 입력으로 들어왔던 수열을 구하는 문제였다.
프로그래밍에서 사용하는 함수의 역함수..?를 구하는 문제는 처음이라 어색했는데, 함수 코드를 한줄 한줄 실행시켜가보자 함수가 조금씩 이해되기 시작했다.
그러나 이걸 다 이해해서 구현하기에는 40분의 시간이 모자랐고, 결국 구현은 하지 못해 3솔로 대회를 마무리하였다.
기업 세션 & 스코어보드 오픈
결과를 집계하는 동안 ICPC도 기업세션이 있었다.
첫번째는 화웨이에서 기업홍보를 진행하였는데, 영어로 진행해서 많이 알아듣진 못했다.
그래도 기업 세션이 끝나고 화웨이 관계자 분들이 앉아있던 테이블로 가서 명함도 하나 받고 포켓몬 레고도 하나 더 받아왔다ㅎㅎ
그 밖에도 엘리스, 크래프톤, 프레스톤? 같은 여러 기업들에서 홍보를 진행했다.
엘리스는 기업 홍보 담당자가 와서 홍보를 진행하였는데, 크래프톤과 프레스톤? 이라는 기업은 ICPC 네임드가 와서 홍보를 진행하였다.
그 중에 기억나는 분은 크래프톤 홍보를 진행하셨던 '지구이' 님 이었다.
백준에서 '지구이 여기 잠들다' 라는 상태메세지를 봤던 게 기억이 나서 정말 신기했다.
그 분은 ICPC 월드 파이널에 나가서 5등을 차지하기도 하셨다고 한다.
크래프톤에서는 AI쪽 일을 하고 계신 것 같았다.
기업세션이 끝나고, 기업에서 기념품으로 머그컵과 후드티를 줬는데, 생각보다 퀄리티가 좋아서 놀랐다.
이후에는 잠시 쉬는 시간을 가진 뒤, 스코어보드를 오픈했다.
스코어보드는 SUAPC와 UCPC에서 항상 보던 그 스코어보드와 똑같은 방식이라 신기했다.
(기업 홍보도 그렇고, 대회 진행시간도 그렇고, 정말 UCPC와 SUAPC는 ICPC 연습이 목적인 대회인 이유를 바로 이해하게 되었다)
대회 진행자분이 센스있게 잘 읽어주셔서 재밌게 봤다.
특히 대만 리저널에서 3등을 차지하는 바람에 월드파이널을 못가고 떨어져 한국을 점령하러 온 네임드 대만팀을 카이스트가 아슬아슬 역전하면서 대회 1등을 한국팀으로 지켜주는 장면은 정말 인상깊었다.
그리고 서강대 팀 중에서 Raa Fan Club 이라는 팀명의 (SUAPC에서도 유명한?) 팀이 있었는데, 막상 대회장에 진짜 롸님이 계시니까 뭔가 웃겼다 ㅋㅋ
사회자가 이 팀 이름을 말할 때, 롸님이 절레절레 하고 계셨다길래 뭔가 상상이 가서 더 웃겼다ㅋㅋ
저녁식사, 그리고 예상치 못한 만남
저녁 식사는 도시락을 준다고 해서, 한솥도시락 같은 도시락을 기대했는데, 저녁도 런치박스 같은 하얀 박스에 샐러드가 나왔다.
이번엔 기본 샐러드에 큐브스테이크와 당근?이 추가되었고, 그 밖에 메뉴는 점심과 동일했다.
점심 저녁을 모두 샐러드로 먹게 될 줄은 몰라서 조금 당황했다.
저녁은 먹고 가도 되고, 그냥 돌아가도 되었는데, 우리팀은 그냥 먹고가기로 했다.
저녁을 먹고 롸님한테 인사를 드리고 돌아가려는데, 롸님이 우리를 보시더니 "어 여기 홍대있네요" 라는 말을 하셨다.
이게 무슨 말인가 했는데, 롸님 앞에 계시던 shiftpsh 님이 택시를 타고 돌아가려고 하시는데, 서강대 사람들이 다 먼저 가버리는 바람에 같이 갈 사람을 찾고 계셨다고 했다.
그래서 어쩌다보니 shiftpsh 님과 함께 택시를 타고 돌아가게 되었다.
게다가 택시비도 shiftpsh 님이 내주신다고 하셔서 본의아니게 얻어타고 가게 되어 너무 감사했다..
택시를 타러 가면서 shiftpsh 님과 잠시 이야기를 할 기회가 있었는데, 내 자기소개 사이트를 shiftpsh 님 사이트를 보고 만들게 되었다는 말씀을 드리자 shiftpsh 님이 "오 혹시 프론트하세요?" 라고 물어보시더니 굉장히 영광이라고 해주셔서 너무 부끄러웠다.
그리고 택시를 기다리는 동안 ICPC기간 마지막으로 드리는 명함이라면서 shiftpsh 님의 명함도 받게 되어 너무 영광이었다.
어제 예비소집 때 얼굴만 봤을 때는, 어차피 우리만 아니까 먼저 말을 걸어야겠다는 생각도 못하고 있었는데, 이렇게 우연히 대화할 수 있는 기회가 생겨서 너무 좋았다.
ICPC 본선을 마치며
ICPC 본선을 한번 나가보니까, 생각보다 너무너무 재밌었다.
사실 백준에서 역대 ICPC 기출 문제 난이도를 보면서 우리는 1솔하고 나머지는 못 풀어서 놀다 오는거 아니냐고 했었는데, 생각보다 이번 대회가 쉬웠던 것인지 4솔에 대한 아쉬움까지 느끼면서 너무 재밌게 즐기다와서 좋았다.
이렇게 재미있는 대회를 공짜로, 그것도 점심 저녁도 제공해주고, 다과도 무제한 제공해주면서 15등 안에 들면 상금이랑 상까지 준다니.. 정말 최고라는 생각이 들었다.
그래서 내년에는 올해처럼 운 좋게가 아니라 실력으로 본선까지 올라와보고 싶다는 생각이 들었다.
그런데 내년에는 휴학생이었던 홍대 다이아들이 많이 복학한다.
그래서 기회가 나한테도 올 지 모르겠지만, 그 때까지 실력을 열심히 키워보고 싶다는 생각이 들었다.
그리고 UCPC 하고 SUAPC도 좀 더 적극적으로 해보고 싶다는 생각이 들었다.
ICPC 연습에 정말 큰 도움이 되는 것 같다.
암튼 정말 재밌게 즐기다가 갑니다!! 😁
'자기계발 > 코딩테스트, 대회' 카테고리의 다른 글
2022 국방오픈소스아카데미(OSAM) 군장병 온라인 해커톤 선발 후기 (0) | 2022.09.26 |
---|---|
Show Me The Code (원티드 주관 코딩테스트 대회) 22년 1회차 후기 (4) | 2022.04.02 |
SUAPC 2021 SUMMER (신촌지역 대학교 프로그래밍 동아리 연합 여름 대회) 후기 (0) | 2021.08.29 |
UCPC(전국 대학생 프로그래밍 대회) 2021 예선 후기 (2) | 2021.07.31 |
2021 카카오 채용연계형 인턴십 for Tech Developers 코딩테스트 후기 (3) | 2021.05.08 |