대회 후기/출제 & 검수

2021 GCC 출제 및 운영 후기

leo020630 2022. 1. 3. 00:24

첫 개최까지

사실, 내가 고등학교에 입학하던 2018년 즈음까지도 고등학교에서 교내 알고리즘 경진대회를 연다는 것은 흔한 일이 아니었다. BOJ에서 자체적으로 설정한 기준이 있다는 점에서도 알 수 있듯이, 문제를 새로 만든다는 것은 굉장한 노력과 경험을 요구한다. 고등학교 수준에서 이를 만족하는 학생 또는 졸업생이 한 학교에 몇 명 이상 있는 것은 소수의 학교를 제외하면 정말 어려운 일이라고 생각한다. 하지만 몇년 사이 교내 알고리즘 대회를 개최하는 고등학교들이 많이는 아니지만 생겨나기 시작했고, 나를 비롯한 경기북과학고등학교 알고리즘 동아리 ALPS 구성원들도 이를 의식하고 있었다. 2021년 결산 글에서 GCC를 2018년부터 시작한 대회라 한 바 있는데, 2018년~2019년에는 백준 그룹의 연습 기능을 이용해 이미 있는 문제들로 대회를 진행하였다. 사실상 대회보다는 모의고사에 가까운 형태였다고 할 수 있겠다. 2020년에 드디어 출제진 주요 구성원이 모두 졸업을 하거나 고3이었기 때문에 대회를 개최할 여유가 생겼지만, 코로나 상황으로 많이 미루어져 올해 초에나 열 수 있었다. 입시 직후였기 때문에 백준에서 열 만큼의 준비는 어렵다 생각해 경기북과학고 학생들이 가장 많이 사용하는 OJ인 Codeup에서 대회를 진행하였다. 자작 문제로 대회를 개최하는 것은 처음이어서 좋은 경험이 되었다. 하지만 Codeup이 대회 개최에 특화되어있는 사이트가 아니었기에 최적화되어있지 않은 부분이 생각보다 있었고, 다음 대회는 BOJ에서 열어야겠다는 생각을 가졌다.

 

대회 준비 과정

본격적으로 올해 대회 개최에 관한 얘기가 오간 것은 11월 중반 쯤이었다. 대회 일정을 12월 말로 잡았었고, 따라서 대회까지 남은 1달 반 정도의 시간을 2주씩 쪼개서 출제 / 선제 및 데이터 제작 / 검수에 사용하기로 했다. 출제진은 BOJ에서 세운 기준을 만족해야 했다. 졸업생 중에는 나와 juney, psb0623 선배가 조건을 만족했기 때문에 참여하게 되었고, 본래 재학생은 출제와 운영에 참여하지 않고 모두 참여하는 것이 기존 방향이었으나 다음 대회를 위한 경험을 쌓는다는 목적으로 2학년의 heeda0528과 gbs16_dohyun이 참여해주었다. (물론 다른 참가자들에 비해 이레귤러라는 점도 한 몫 한 것 같다ㅎㅎ) 본격적인 출제에 들어가기 전, 출제 기조를 정했다. 참가자 대부분이 세그트리 이상의 알고리즘에 익숙하지 않으니, 이보다 Hard한 알고리즘 문제는 내지 않는 것이었다. 전반적인 문제 퀄리티가 좋은진 잘 모르겠으나, 셋의 방향성 자체는 기조에 잘 따른 것 같아서 괜찮은 것 같다. 출제만큼 중요한 것이 검수진 모집인데, 이는 juney가 도맡아 해주었다. 경험 많은 검수진분들 덕에 대회가 산으로 가지 않았던 것 같다.. 다시 한번 감사드립니다.

 

본 대회 & Open Contest

본 대회는 2021년 12월 29일에, Open Contest는 2022년 1월 2일에 치러짐으로써 해를 넘기면서 치러진 대회가 되었다. 본  대회는 부분 대면으로 진행되었는데, 집도 가깝고 방학이라 할 일도 없던 나는 학교에 가서 진행을 도와주었다. 강의실을 여러개 사용해야 했기에 좋은 선택이었던 것 같다. 1, 2, 3등과 참가상은 후원사인 넥슨의 도움 덕에 준비할 수 있었고, 5개의 특별상 또한 우리가 정한 기준으로 시상했다. 다만, 요새 특별상의 존재와 기준들이 너무 Well-known이 되어버린 바람에 특별상만을 노린 제출이 좀 있었다.. 더 참신한 기준을 준비하거나 특별상의 존재를 비밀로 부쳐야겠다고 생각했다. 대회 진행은.. 결과부터 말하자면 순조롭지 않았다. 많은 문제의 데이터에 적지 않은 결함이 있었고, 대회 내내 이를 고치고 재채점 했던 것 같다. 운영진의 미숙함이 드러난 부분이었던 것 같다. 한번 당했으면 정신을 차렸어야 했는데, Open Contest에서도 이 문제는 그대로였고, 총 3차례정도의 재채점을 했던 것 같다. 다음 대회부터는 더욱 꼼꼼히 검수해야한다는걸 뼈저리게 느끼게 되었다..

 

출제한 문제 후기

내가 출제한 문제는 총 3개로, 달팽이팽이, 타이어 끌기, 바코드 찢기 문제이다. 달팽이팽이와 바코드 찢기는 알고리즘을 전혀 필요로 하지 않는 애드혹 문제, 타이어 끌기는 전형적인 DP 문제로 출제하였다.

 

달팽이팽이

찍맞은 쉽고 증명은 비교적 어려운 대표적 문제라 할 수 있다. 난 출제 과정을 증명과 함께 했고, 따라서 적당히 어려운 문제로 인식하고 있었으나 본 대회와 오픈 모두에서 꽤 많은 솔브 수가 나온 것을 보면 아닌거 같다.. 아마도 "(0,R)이 답인데?" -> "내부네? 그러면 (1, R-1)?" -> "x좌표를 늘려볼까?" 정도의 의식의 흐름을 거치면 쉽게 답을 찾을 수 있는 것 같다. 문제 자체는 셋의 기조에 맞는 적절한 애드혹 문제라고 생각한다.

 

타이어 끌기

학교 운동회 종목에서 컨셉을 잡아 3문제를 만들었지만, 혼자만 살아남은 비운의 문제다. 문제의 내용은 경기의 실제 룰에서 따왔고, 적절히 교육적인 냅색 DP 문제가 된 것 같아 좋다. 풀이 자체는 기본 냅색에 변형을 조금 주어야하지만, 처음 보고 냅색 DP인 것을 꽤 알아채기 쉽게 제한을 줘 많이 해결한 것 같다.

 

바코드 찢기

문제 출제를 위해 끄적이다, "괄호 문자열에서 나올 수 있는 올바른 괄호 문자열의 최대 개수는 ()의 개수와 같다"라는 점을 떠올리고 이를 이용하기 위해 출제한 문제이다. 이 점만 유지한 채 컨셉의 변화를 많이 겪은 문제이기도 하다. 결론적으로는 BOJ 2869 - 달팽이는 올라가고 싶다와 같은 모델링을 사용하는 문제가 되었다. 저 문제를 풀어보았다면 빠른 시간 내에 해결할 수 있겠으나, 그렇지 않으면 조금 헤메는 것으로 보인다.