2022 연세대학교 신학기맞이 프로그래밍 경진대회 출제후기

standingbell·2022년 3월 21일
1

2022/03/19 연세대학교 신학기맞이 프로그래밍 경진대회

2022년 3월 19일 연세대학교 신학기맞이 프로그래밍 경진대회가 개최되었고, 이번에 출제진으로 참여하게 되었다. 물론, 알고리즘을 좋아하기만하고 시간투자를 못하는 상태였지만... 2020년도 ICPC Seoul Regional 본선 20등 이내 자격으로 출제진 자격을 얻을 수 있었다. (10등인가..? 그건 딱히 중요하지않다)

2022년 1월 ~ 2월 초반 :

출제진들과 함께, 전체적인 대회 컨셉이랑 문제수준, 대회 후원사 모집, 특별상 논의, 문제 Outline 회의 등이 있었다.
이때부터 나왔던 얘기는, 알고리즘쪽 Problem Solving 쪽은 처음에 흥미 가지게 하기가 힘드니깐 알고리즘이 안쓰이는 문제들을 위주로 준비하자는 말들이 많았다. 개인적으로 느꼈던 점들은, Tree Graph 부터 약간씩 벽이 세워지고, SegmentTree가 진짜로 PS하는 사람들에게 다가오는 일종의 벽처럼 느껴졌기 때문에 신입생 새내기들도 참여하는 대회에서 어렵게 출제할 필요는 없다고 생각했다.

하지만 너무 문제들이 쉬우면 패널티 싸움 + 올솔 (All Solving) 대결이 되기때문에 이런 현상들은 다들 막고싶어했다. 어차피, 새내기들도 참여하고 기존학생들도 참여하게 하는 방법은 '참신함'으로 백준에 있는 다양한 유형 들로 문제들을 출제하기로 했다.

위 사진만봐도 알 수 있듯이, 비고란에 적혀있는 스폐셜 저지, 전체채점, 언어제한, 클래스구현, 서브테스크, 함수구현, 인터랙티브 + C번은 고의적으로 낸 영어 문제 였다. 아마 기존 대회를 생각하고 참가한 사람들은 당황스럽지 않았을까...?
https://help.acmicpc.net/problem/style 해당 링크에서 확인할 수 있는 모든 유형들을 하나씩 전부다 적용해보자 ( LR-Flow 라던가, Suffix Array 같은거를 저런걸로 내면 양심없으니깐...) 라는 마인드로 모든 출제진이 방향을 정했다.

2022년 2월 초반 ~ 3월 초반:

이번에 내가 출제를 맡은 파트는 영어 문제, 클래스구현 문제였다.
https://www.acmicpc.net/problem/24725
https://www.acmicpc.net/problem/24728

C번 같은 경우에는 S4~S2 정도를 겨냥하고 낸 문제였고, 기존 백준에 단어찾기 느낌의 문제가 많이 없길래 해당방향으로 출제했다. DFS로 풀면 굉장히 쉬운 유형으로 해결가능하지만, Brute Force로 푼다면 배열 탐색 방향, 8가지 방향 + 고의적으로 준 N,M \leq 4 조건으로 경계조건에 신경써줘야하는 문제였다. 해당 최소 데이터 조건이랑 모든케이스를 고려하기 위해 데이터를 꼼꼼하게 신경써서 넣어줬었다. 즉, DFS를 알고있는 사람이라면 한방에 어렵지않게 풀수있지만, DFS를 모르더라도 시간 투자만 하면 풀 수 있는 문제를 출제했다.

문제 난이도 자체를 많이 어렵진 않지만, A,B번을 산뜻하게 풀고 시작한 사람들에겐 갑자기 영어문제가 나와서 당황할 수도 있었을 것 같다.

지문도 신경써서 굉장히 귀엽고 아기자기하게 만들려고 노력했으니 시간이 된다면 한번씩 풀어주면 기분이 굉장히 좋을것같다... 헤헤

2022년 3월 초반 ~ 3/19 :

출제하는 입장에서도, 푸는 사람들 입장에서도, 백준님 입장에서도, 검수진들 입장에서도 모두가 당황했을 문제가 아닐까 싶다. 대회에서 나오는 첫유형에다가 백준에 딱 한문제 (https://www.acmicpc.net/problem/15687) 존재하는 유형을 출제하게 됐다. 지금와서 말하자면 낚인 기분이지만... 정말 힘들었다... 결론적으로 말하자면 아쉬움이 많이 남는 문제였다.

처음에 클래스구현을 맡았을 때, 어떤 방식으로 해야할지 막막했다. 내가 OOP를 잘하는 편도 아니었고, 최근까지 Tensorflow2, Pytorch만 주구장창하고 해석학만 들여다보고 있었기때문에... 간단하게 생각나는거는 아무래도 '게임'형식이 가장 무난하지 않을까 생각이 들었다. 체스판, Rabbit Tiger Hunter 등등이 가장 Getter, Setter를 적용하기 쉽지않을까 싶은 후보들이었다.
문제 Outline 구상 자체는 쿠키런을 하도 많이하다보니깐 어렵지는 않았지만, 문제 세부조건들을 정하면서 많이 고생했다. 어디부터 어디까지 자세하게 설명을 주고, 문제 푸는 사람들은 어떤식으로 이해하게 할지, 어떤 방식으로 채점해야할지 도저히 감이 안잡혔다.

아마, 이때쯤 나와 약속을 잡은 사람들이 많이 들었을 '나 대회문제 내야해' 의 주인공이 이 문제였을 것 같다.

1. 언어별로 다르게 구현해야한다

언어제한이 걸려있긴 하지만, C++ only 라는 참사를 막기 위해서, 최소한 범용성이 넓은 언어 C++, Python, Java 3가지에 대해서 구현을 따로따로 했어야 했다. 어렵진않지만, 계속 환경을 옮겨가면서 3가지 모두다 잘 동작하는지 테스트해야 했기때문에 혼란스러웠다.

2. Grader 구현

함수구현과 마찬가지로, Class 구현은 따로 Grader 채점기를 만들어줬어야 했다. 이번이 처음 출제였어서 그냥 Data Generator 다루것도 익숙하지 않았었는데, 전혀 정해지지 않은 포맷에서 구현하려니깐 막막했다. 추후에 기회가 된다면, 해당 Grader 구현 과정을 포스팅해볼까 한다.

처음이여서 더 힘들었고, 그와중에 첫 유형이여서 더 애먹었던 것 같다. 사실 위 문제의 해답은 해당 대회에서 쉬운편에 속했지만, 다들 처음보는 유형이여서 풀이 된 횟수가 적었던 것 같다.

3. Class Header 파일 및 Local 환경 세팅

PS 하는 사람들은 굳이 커스텀 헤더파일을 쓰지 않았을 것이다. VScode, Visual Studio 계열에서 따로 설정하기 위해서는 조금 귀찮은 과정을 거쳐야하고, 해당 과정이 익숙하지 않은 사람들이라면 아마 Local 세팅에서 돌리는 것 조차 힘들었을 것 같다. Java도 따로 프로젝트를 만들어줘야하는건 물론이고, 사실상 Python이 승자다. 이점 때문에도 조금 많이 귀찮았다...

생소한 유형이다보니 Open Contest에서도 F번을 기준으로 분리되는 현상이 나타났는데... 첫 유형이다보니 지문상에서 어색한 부분이 많았던 것 같다.

2022/03/19~20 : 대회 당일

의외로 C번은 틀리지 않고, 깔끔하게 한번에 통과하는 사람들이 많았었고, E번 인지융에서 통곡의 벽이 세워졌었다. (물론, D번도 어떤공식을 모른다면 오래걸렸겠지만...) 걱정했던대로 F번이 패싱당하는 현상이 나타났지만, 이번 대회에서 1등을 차지하신 luciaholic님께서 빠르게 풀어주셔서 그런지 본대회에서는 상위권분들이 많이들 도전해줬다. 많은 분들이 맞춰주셔서 적어도 데이터가 괴상한 현상을 없었던 것 같아서 한시름 놓았다. 물론, 지문이 어색한 부분은 몇개 있었던 것 같지만, 이점은 계속해서 수정해 나가야 할 것 같다. (아무리 다듬어도 다듬어지지 않은 지문...)

F번 팬케이크맛 쿠키 지문은 지속적으로 모니터링하면서 개선해야 할 것 같다. 변명할 여지 없이 내 역량 부족이다.

후기

첫 문제 출제인만큼 스스로에게 아쉬운 점도 많고, 아무래도 낮시간을 쓰지 못하다보니 시간에 많이 쫓겼다. 그리고, 다른 학회일들도 있다보니깐 온전히 시간을 쏟지도 못했고, 나도 계속해서 내 할일을 해야했던터라 아쉬움이 많이 남았다. 그렇다고 1년이내에 문제를 다시 출제하고 싶다거나 그러고싶진 않다.

그래도 세팅하는데 고생 많았던 대회였고, 특이한만큼 리스크도 컸던 대회였는데 다행스럽게 안터지고 잘 끝나서 뿌듯했다. 그리고, 전반기 대회였음에도 불구하고 많은 인원들이 참여해줬고, Open Contest도 (어디서 특이하다는 소문을 다들 듣고 오셨었는지) 많이들 참여해주셨어서 놀랐다. 당분간 출제를 안할 것 같아서 더 애착이 가는 문제들이었다. 특히, 해당 대회를 같이 준비한 출제진들과 검수진분들, 모든 기능을 활용하는데 노력해주신 백준님까지 모든 사람들께 감사하다는 말씀을 드리고 싶다.

추후에 많은 사람들이 할 수 있도록, Polygon을 활용한 문제 세팅 방법을 만들어볼까 하는데 기회가 될지는 모르겠다... 어쨌든, 최근에 겪을 수 있는 굉장히 특별한 경험이었어서 기록으로 남겨보았다.

profile
DL ML Tensorflow Pytorch PS

0개의 댓글