KUPC 2023 개최 후기


작년 이야기

학교에 입학할 때만 해도 많은 학생들이 알고리즘 문제풀이에 관심을 가졌던 건 아니었다. 2019년에는 동아리에 속했던 사람들끼리 스터디를 하는 정도였고, UCPC나 ICPC 등의 대회에 참여하는 소식을 듣지 못 했다. 알지 못했으니 참여할 생각도 못 했다.

2022년에 군복무를 마치고 복학하고 나서 들었던 과목은 김성렬 교수님의 알고리즘이었다. 즐겁게 들었던 것을 넘어서서 공부법에 대해서 깨달은 게 많았다. 단순히 증명 위주의 과목이었음에도 불구하고, 더 즐겁게 문제풀이에 적용할 수 있었다.

코로나의 여파로 많은 동아리들이 사라졌고, 휴학 전에 몸을 담갔던 동아리도 다른 동아리처럼 활동이 뜸해지더니 찾아볼 수 없게 되었다. 대회를 열고 싶었지만 주최할 수 있는 단체가 없었고, 결국 마음이 맞는 세 명의 친구들과 함께 사비를 써가면서까지 열었던 작년의 KUPC였다.

작년 KUPC는 Codeforces에서 진행됐었다. ‘대회 여는 게 어때?’ 라고 아이디어를 냈던 시기로부터 대회 예정일까지 시간이 너무 촉박했다. 문제 세팅 – 외부 검수 – 데이터 및 대회 전체 운영을 모두 진행하기에는 어려울 것 같다는 이야기를 나누었다. 부담없이 다른 사람들과 즐기는 문제풀이를 만들자! 라고 결론이 나왔고, 예상대로 잘 치러졌다. 10문제 중 뒤쪽 5문제는 현재 백준 온라인 저지에 등록이 되어 있다. (27977 ~ 27981번 문제)

작년 대회에서는 31명의 사람들이 함께 겨뤘다. 참가자에게 스티커를 나눠주기도 하고, 종료 후 스코어보드 오픈 및 특별상 수상 등을 통해서 Competitive programming의 재미를 알리는 데 성공했던 것 같다! 많은 분들이 대회가 끝난 뒤 ‘동아리 생기면 꼭 홍보해주세요’라는 말씀을 해주신 덕분에 용기가 난 것일까.

올해 대회 🎈

기세를 몰아서 2023년, 컴퓨터공학부 내에서 알고리즘 동아리를 창설해서 운영까지 하게 되었다. 동아리의 목적은 분명했다. 많은 사람들에게 알고리즘 문제풀이의 재미를 알리기, 그리고 여러 대회를 소개하면서 참여하도록 독려하기. 앞선 목적을 달성하기 위해서 1학기에 8차시 세미나를 열었다. 동아리 내 온라인 연습을 진행하면서 대회에 익숙해지기도 하고, 1학기 종강과 더불어 UCPC, SCPC, 현대모비스 알고리즘 대회 등의 참여를 독려했다. 특히 여름방학 UCPC에서 교내 학생이 포함된 팀이 7팀이 넘어갔던 걸 생각하면 꽤나 큰 발전이 이루어진 것 같다.

대회를 열겠다고 마음먹은 건 알고리즘 동아리가 결성되기도 전이었다. 출제하고 싶은 사람들을 찾아 나섰고, @riroan형과 @dldyou가 미리 출제하고 싶다고 귀띔해준 터라 바로 영입했다. 함께하기로 했지만 출제에 어려움을 겪었거나, 문제가 선정되지 않은 사람들은 교내 대회의 내부 검수를 담당해주기로 했다.

대회 문제 구상하는 노션 페이지, 3월 2일에 만들어졌었네

올해 대회에는 작년 함께 출제했던 @delena0702가 참가하겠다고 선언했기 때문에, 원래 그러면 안 되는 걸 알면서도 집중견제를 한다고 신경이 쓰였다. 문제 세팅을 위해 만났던 자리에서도 “얘가 올솔할 것 같은데” 같은 농담을 던지기도 했다.

대회 문제를 구상하는 노션 페이지에 엄청난 양의 문제 아이디어가 있었어서 선별하는 데 꽤 애를 많이 썼다. 열 문제를 생각하고 문제를 세팅하자니, 이걸 넣으면 저게 아깝고, 저걸 넣으니 난이도가 애매하고. 서로 머리를 맞대고 열 문제를 골랐다. 못 풀 것 같았던 문제를 열심히 묵혀두었더니 풀려서 대회에 나온 문제도 있다. 이번 대회의 우정은 BFS처럼, 사랑은 DFS처럼, 양손 정렬 두 문제는 노션 처음 만들어질 때부터 있었던 올드페이스 문제였다. 내가 문제 지문과 아이디어를 모두 적어두면 다들 몰려들어 아이디어를 쏟아내고, 세네 달에 걸쳐서 풀이를 만들고, 자세한 증명을 @dldyou가 깎아내 줬다.

말도 안 되는 문제 양.. 심지어 이 문제들은 지문은 물론이고 정해까지 모두 쓰였다..

문제 세팅이 대회 운영의 전부가 아니라는 것을 알기에 더욱 일찍부터 준비한 것도 있다. 대회 시기를 정하는 것부터 상품 준비, 외부 검수자 모집 및 solved.ac 뱃지/배경 디자인까지. 백준 온라인 저지에서 대회를 열기 위해서 도움의 손길이 필요한 곳이 참 많았다. 지금 생각해보면 문제 세팅을 조금 더 일찍 마치고, 완벽하게 준비한 다음에 대회 전에는 대외적인 것만 준비하면 덜 정신없었을 것 같다.

운좋은 아레나 시기, 문제 세팅

마침 아레나 지원을 받고 있었고, 지원할 경우 뱃지/배경 등록료 지원 및 검수 인원까지 제공해준다고 했다. 경제적으로 팍팍했던 터라 희소식이 아닐 수 없었다. 어찌저찌 막차를 탄 것 같았고, 아레나 준비를 위해 가이드라인을 꼼꼼히 읽어가면서 지문 / 밸리데이터 / 데이터 등을 짜 나갔다. 올해 디비전을 나누게 돼 문제 수가 15문제정도로 늘어난 데다가, 그 중 9문제가 내가 만든 문제라(…) 대부분의 지문, 체커, 밸리데이터, 데이터를 만드는 것은 나의 몫이었다.

내가 만든 문제들. 위쪽 다섯 문제는 2019년에, 아래 9문제는 올해 대회에 출제된 문제다!

문제를 만들 때 가장 중요하게 생각했던 것은 읽히기 쉽도록 문제를 만들자는 것이었다. 다양한 사람들이 대회에 참여하기 때문에 지문이 여러 방향으로 해석되는 것은 절대 일어나면 안 됐다. 글자 하나가 바뀔 때마다 처음부터 다시 읽어보기를 반복해야 했다. 맞춤법이나 비문, 너무 긴 문장이 있다면 쪼개나가는 과정을 계속해서 반복했다. 올해 지문은 깔끔하게 잘 나와서 만족한다! 나아가 하나의 대회에서 진행되는 만큼, 문체의 일관성이나 입/출력에서 설명하는 문구 등을 모두 통일하는 것까지 도맡았다.

지문이 다 되었으면 데이터를 확인하는 밸리데이터를, 스페셜 저지가 붙어있다면 체커까지 작성한다. 이후에 데이터를 직접 손으로 써서 넣지 않고, 데이터를 만들어 주는 제너레이터까지 코드로 열심히 짜서 넣어 준다. 백준 플랫폼에는 제너레이터를 지원하지 않기 때문에, Polygon에서 모든 세팅을 완료한 뒤, 외부검수자분들이 오셔서 진행할 때 백준 스택을 활용했다.

교내 검수자로 각 출제진, @keunbum님이 고생해 주셨고, 바깥 검수자로는 졸업하신 @asz2325님, @pizzaroot님, @utilForever님과 @naeby님까지 너무 도움을 많이 주셨다. 특히 안에서는 허구한 날 문제만 쳐다보고 있다 보니 어디가 문제점인지도 찾지 못하는 경우가 많은데(…), 새롭게 문제를 접하는 분들께서는 어색한 부분이나 더 적어야 할 조건들을 잘 알려주셨다. 나아가 풀이까지도 생각하지 못한 다른 풀이로 통과되는지 꼼꼼하게 확인해주셨다.

Polygon에서 진행된 테스트

문제를 세팅해나가는 것과 온사이트 대회를 준비하는 것을 동시에 진행하고 있었기에 꽤나 부담이 많았다. 60여명이 참가 신청서를 제출해주시는 덕분에 어깨는 더더욱 가라앉았던 듯했다. 기대해주시는 만큼 멋진 대회를 위해 많이 노력했던 것 같다.

대회 외적으로 신경써야 할 것

우선 돈이다. 상금이 크면 클 수록 사람들이 많이 관심을 가져 주고, 특히나 교내 시설과 연계한다면 상장도 받아낼 수 있다. 올해 대회에서는 학교 소프트웨어중심대학과 연락해 상금을 받고, 추가적으로 상장까지 받을 수 있게 되었다.

대회 환경이 다소 익숙하지 않은 사람들을 끌어모으기 위한 여러 굿즈들도 필요했다. 작년에는 작은 스티커 두어 개를 출력해서 드렸었는데, 동아리 회비도 많이 모아서 스티커는 물론이고 부원들에게 줄 키링도 제작할 수 있었다. 디자인을 담당해주시는 분이 1학기 때 팀플 통해서 알게 된 분이신데, 포스터부터 동아리 로고, 스티커, 솔브드 로고까지 너무 힘써주셨다. 정말정말 고맙습니다 🤗

귀여운 굿즈

굿즈 제작과 실물 포스터까지 마친다면, 인터넷을 통한 홍보도 진행해야 했다. 에브리타임을 통해 다른 과 학생들에게도 홍보하고, 교내 홈페이지 대문과 건물 내 전광판에도 내걸어 최대한 많은 사람들이 대회를 봐줬으면 했다. 작년에도 50명 참가신청서를 냈는데 30여명이 함께한 걸 보아서는, 적어도 7-80개의 신청을 받아야 우리가 원하는 그림이 나올 것 같았다.

또, 사실 온사이트 대회라면 풀이 해설과 스코어보드 공개, 특별상이 제일 재미있는 순간이라고 생각한다. 이번에도 풀이 소개할 때 슬라이드를 준비해야 했기에… 요즘 재미들러서 많이 사용하는 typst를 활용해서 에디토리얼을 만들었고, 잘 발표했다! 한 가지 아쉬웠던 점은 프리즈 전 통계를 넣어뒀어야 하는 점이었는데… 뒤에 다시 이야기하겠지만 1등과 2등이 다행히 같은 솔브 수라서 긴장감이 풀리는 일이 일어나지는 않았다.

귀여운 에디토리얼

온사이트 대회

대회 당일에는 사실 운영진이 크게 할 일은 없다. 사람들 들어오면 통제하고, 문제풀이 중에 참가자로부터 질문이 들어오면 적절하게 답변하고. 그 외 시간에는 스코어보드를 보면서 서로 이야기를 나눈다. 1등이 몇 문제를 풀지 서로 맞춰보기도 한다. 나는 딥2 8솔, 딥1 9솔이 나올 줄 알았는데 둘 다 못 맞혔다 😅

간단하게 앞에서 인사와 함께 대회에 대한 설명을 포함한 오리엔테이션을 디비전별로 진행했다. 간식이 조금 남아서, 앞에서 가져가라는 말씀도 드렸다. 강의실 앞쪽에 큰 스크린이 있어서 스코어보드를 띄워두기 좋았다. 적당히 사람들에게 자극이 되었으려나 모르겠다 🙄

시작 후 30분정도와 프리즈가 된 시점이 제출이 가장 많은 시점이다. 시작할 때에는 쉬운 문제이기에 사람들이 빠르게 풀어나가고, 프리즈가 된 뒤에는 깨우침(?)을 얻고 코드를 짜서 제출하는 사람의 비중이 높은 편. 난이도 커브를 오름차순으로 고려했지만 디비전 2에서는 그렇게 느껴지지 않았던 것 같다. 확실히 아이디어 기반 문제가 많다 보니, 출제자/검수자 의견과 참가자 의견이 갈릴 수밖에 없는걸까?

5-6번 넘게 틀리는 분들은 스코어보드에서 갱신이 일어날 때마다 직접 채점 현황을 들락거리면서 어떤 부분을 실수하셨는지 보기도 했다. 여러 실수 중에서는 출제자가 처음에 발견한 반례, 검수자가 처음 문제를 해결하다가 실패한 상황 등 다양했다.

결과

디비전 2
디비전 1

Div. 2, 1 각각 9솔, 8솔로 대회가 잘 마무리됐다. 스코어보드도 3시간 내내 엎치락뒤치락하면서 진행됐기에 즐겁게 구경했다. 문제 난이도 풀이 다양해서 그런가 사람들이 많이들 풀어 주셔서 감사했다 🥰 특히 Div. 1에서의 첫 번째 문제가 1분만에 10명 가까이 풀어주신 데다가, 문제 정답률이 100%여서 진짜 놀랍게 봤다. 적어도 한 번은 틀려줄 줄 알았는데…

생각지도 못한 방법으로 문제를 푸는 참가자분들을 보면서 데이터를 확실하게 준비해서 다행이라는 생각을 많이 했다. 특히 이분 탐색에서 범위를 실수한다면 금방 어려워질 수 있었는데, 아니나다를까 많은 사람들이 넘어져서 D로 피난(?)가는 모습을 보였다. 뒤쪽 I, J 문제를 적어도 하나는 풀 줄 알았는데 끝까지 해결되지 않아서 참 아쉬웠다. 확실히 애드 혹 문제들이 난이도 편차가 크긴 한가보다. (3달동안 풀이 못 찾아서 못 나올 뻔한 문제인데 이런 얘기 하는것도 웃기다)

내 일정이 단단히 꼬인 것은 그거대로겠지만, 대회는 잘 마무리됐다. 다음 날에 있었던 아레나에서도 무사히(?) 문제가 공개됐고, 별 이슈 없이 백준에 올라갔다. 어렵사리 완성한 에디토리얼까지 함께 업로드되면서 그제야 한숨돌릴 수 있었다. 3-4월부터 오랜 기간 합을 맞추기도 어려운 일인데, 서로 군말 않고 할 말은 다 하면서 의견을 모은 덕에 질 좋은 문제와 재미있는 대회가 되었던 것 같다. 모두모두 수고했고, 내년에도 기회가 되면 운영까지는 모르겠지만 출제 정도는… 생각해보니 이것도 아닌 것 같다.

아니 어떻게 3시간에 14문제를 열명이나 풀어요

백준에 대회를 열겠다고 하자 별 말 없이 잘 진행해주신 백준님, 아레나를 위해서 바쁘게 달려주신 수현님을 비롯해서 도움을 많이 받았다. 정말정말 고맙습니다 🥰

내년에도 하나요?

참가자로 함께하겠습니다 하나 둘 셋 @dldyou 화이팅!!

Categories