2023 전남대학교 PIMM 알고리즘 파티 돌아보기

K_Gs·2023년 9월 10일
5
post-thumbnail

2023 PIMM 알고리즘 파티 대회가 9월 3일에 마무리되었습니다.
많이 걱정했지만, 큰 문제없이 끝나 다행인 것 같습니다.

열심히 준비했던 첫 대회를 한번 돌아보겠습니다.

대회 개최

개최 배경

게임개발 동아리인 PIMM의 알고리즘 스터디는 2022년 1월 즈음부터 시작되었습니다.
처음에는 진짜 간단한 실버, 골드 문제를 푸는 스터디였지만, 새로운 사람이 들어오고 급격히 성장하여 스터디보단 알고리즘 소모임에 가까운 느낌이 되었습니다.

다들 플레, 다이아를 달성하고 난 후에는 다른 일을 하다 대회가 있으면 참여하는 등 잔잔하게 이어지게 바뀌었지만, 가끔 이쯤이면 출제 해볼 만하지 않을까?같은 이야기가 나왔었습니다.

그러던 6월경 종현이(beline0124)가 대회 개최를 제안하게 됩니다.

목적

대회 개최의 목적은 여러 가지가 있었습니다.

  1. 대회 출제 프로세스의 경험
  2. 대회 개최를 바탕으로 전남대의 알고리즘 활성화 도모
  3. 우리가 어디까지 할 수 있을까

개인적으로는 열심히 해서 성장한 우리가 어디까지 해볼 수 있을까를 확인해보자는 목적이 주였고,

외부적으로는 알고리즘 문제 풀이가 잘 알려지지 않은 우리 학교를 대상으로 대회를 열어 선순환의 기초를 만들어 보자는 목적이었습니다.

문제 출제

출제 조건

대회 개최진이 모이고 출제 준비에 들어갔습니다.

가장 먼저 출제 조건을 확인했습니다.

대회에 참가하는 것은 제한이 없지만, 대회를 개최하는 경우 문제를 만들고, 그 문제를 내부적으로 올바른지 검수해야 하기에 조건이 있습니다.

기준 A (대회 문제 출제, 대회 내부 검수자)

  • BOJ 1000문제 이상 해결
  • Codeforces 레이팅 1600 이상
  • Atcoder 레이팅 1200 이상
  • ICPC 리저널 본선 30등 이상

출제 조건의 경우 대회 진행 이전에만 맞추면 됩니다.
조건을 아직 달성하지 못한 출제진은 빠르게 달성할 수 있는 문제 풀이로 조건을 맞추었습니다.

하루에 82문제를 풀어내는 노력을 통해 모든 출제진이 조건을 맞췄습니다.

방향성

출제에서 첫 번째로 한 일은 초안 작성이였습니다.
우리가 백준에 들어갔을 때 보는 문제처럼 설명, 입출력 양식, 예제등을 작성하는 것인데,
이때, 이 문제에 어떤 알고리즘이 쓰이고 어떤 난이도를 의도할지도 같이 들어갑니다.

이 난이도의 방향성에 많은 고민이 들어갔습니다.

이번 대회는 전남대의 알고리즘 활성화라는 목적이 있긴 했지만 전남대생만으로는 대회를 열 정도의 참가자를 얻을 수 없기에 백준에서 일반사람도 참가할 수 있도록 했습니다.

이것 때문에 발생한 문제로, 전남대생의 알고리즘 해결 능력이 높지 않기에(위에서 이야기했듯 잘 알려지지 않음) 전남대생을 대상으로 문제를 내면 일반인들이 너무 빠르게 풀어낼 것 같았고
이를 어느 정도 방지하기 위해 전남대생의 알고리즘 해결 능력보다 높은 플레, 다이아 문제도 출제하게 되었습니다.

초안이 작성되었을 때 기준으로 문제들이 브론즈 1, 실버 1, 골드 3, 플레 2였으니 전남대 학생이라면 3~4솔정도를 할 것으로 예상하고 이 정도면 괜찮지 않을까? 하며 다음 단계로 갔습니다.

대회가 끝난 지금에서 보면 문제수를 늘려 브론즈, 실버를 조금 더 챙겼다면 어땠을까 하는 아쉬움이 있습니다.


저는 초안으로 플레 3 정도의 오일러 투어 테크닉(ETT) + 오프라인 쿼리 문제와 플레 5~4 정도의 다익스트라 문제를 준비했었습니다.

전자의 경우 ETT의 기본 난이도가 플레 4 정도로 이런 알고리즘이 있다라는 느낌의 연습 문제로 쓸 수 있을 법한 문제였고, 후자의 경우 발상과 응용이 들어가서 난이도가 올라간 문제였습니다.

제가 지향하는 문제의 방향은 후자에 가까웠기에 후자를 선택하려 하였지만, 입력과 문제 설명에 너무 비문이 많고 복잡해 초안 마감이 얼마 남지 않은 상황에서 이걸 개선하긴 어렵겠다고 판단하였고, 결국 전자로 가게 되었습니다.

(사라진 문제의 초안)

이런 이유로 저는 문제가 알고리즘 난이도로 티어가 높아졌다고 생각해 그다지 좋아하진 않았습니다.

그래도 자주 보다 보니까 정들었습니다.

세팅 과정

초안이 잡혔으니 이제 문제 세팅을 해야 했습니다.

일부 출제진의 경우 다른 대회 문제 검수, 출제를 한 경험이 있지만 저 같은 경우는 문제 세팅 과정을 전혀 모르고 있었습니다.

처음이 가장 낯설고 어렵기에 이 부분에서 저는 출제 경험이 있는 출제진의 도움을 많이 받고, 익숙해지는 걸 목표로 잡았습니다.

문제 세팅은 다음에 있는 것들을 만드는 과정입니다.

  1. 지문 : 설명, 입력 범위, 예제 테스트 케이스 등이 적힌 문제에 대한 설명입니다.
  2. 메인 솔루션 : 문제의 정해입니다. 절대로 틀리거나 잘못되어선 안 됩니다.
  3. 테스트 케이스 : 문제의 입력과 그에 예상되는 출력입니다. 출력은 처음에 메인솔루션을 통해 만들어집니다.
  4. 벨리데이터 : 테스트 케이스가 문제의 입력 양식에 맞는지 확인합니다.
  5. 제네레이터 : 랜덤하게 테스트 케이스를 생성합니다.
  6. 체커 : 사용자 코드의 실행 결과가 테스트케이스의 출력과 같은지 확인합니다.

지문, 테스트 케이스 등은 문제를 풀면서도 봤던 것들이기에 익숙했고, 체커의 경우 기본 제공된 걸 사용해 따로 건들지 않았습니다.

신기했던 건 메인솔루션, 벨리데이터, 제네레이터로, 각각을 만드는 과정이 하나의 문제를 푸는 느낌이었습니다.

이 지문에 올바른 답을 출력하는 코드를 작성 -> 메인 솔루션
이 지문 입력에 맞는 테스트 케이스인지 확인하는 코드를 작성 -> 벨리데이터
이 지문 입력에 맞는 테스트 케이스를 생성하는 코드를 작성 -> 제네레이터

이렇게 문제가 준비된 후 검수진을 모집하였습니다.

결과적으로 총 8분의 검수진이 모였습니다.

검수진분들은 각 문제에서 위에 만들었던 6가지를 검수해 주셨는데, 단순히 문제의 이상 여부 말고도 난이도 추정, 비문 수정, 가독성 높이기, 부족한 테스트 케이스 추가 등 다양한 작업을 해주셨습니다.

이러한 검수진분들의 노력과 종현이의 체계적인 진행으로 대회 일주일 전에 모든 문제의 검수를 마무리하게 되었습니다.

상품

상의 구성

대회에는 추첨 및 순위에 따라 상품을 주는 걸로 결정하였습니다.

대회 종합 1~5위 순위상
대회 전남대 1~5위 순위상
특별상(도전과제)
추첨상

상 목록이 조금 많은 편인데 원래 처음에 오픈컨테스트 순위상이 단 하나만 만들어졌습니다.

순위상을 주기로 한 이후 대회 이름이 '알고리즘 파티'가 되면서 도전과제를 만들고 달성하면 상품을 주는 게 어떠냐는 의견이 나와 그때 이제 특별상을 만들게 되었습니다.

다양한 사람에게 상품이 분배되었으면 하였기에, 특별상은 알고리즘 실력에 크게 관련 없는 목표로 이루어져 있습니다.

다음으로 만들어진 것은 전남대 순위상입니다. 목표 중 하나가 대회 개최를 바탕으로 전남대의 알고리즘 활성화 도모 였기에 재학생을 참여시켜야 할 필요가 있었습니다. 그렇기에 내부에서 전남대 학생의 순위를 따로 집계하자는 의견이 나왔고, 이에 다들 동의하여 순위상이 만들어졌습니다.

마지막 추첨상은 출제진들의 후원으로 예산이 남아서 만들어졌습니다. 대회인 만큼 더 많은 문제를 푼 참가자에게 이점을 주는 게 맞다 생각하여 솔브수의 제곱을 가중치로 추첨하였습니다.

개인적인 생각으로는 파티인 만큼 추첨상과 특별상을 조금 더 늘려도 괜찮지 않았을까 하는 생각이 있습니다.

solved.ac

또 다른 상품으로는 solved.ac의 프로필 꾸미기 아이템 중 하나인 뱃지와 배경이 있습니다.

대회에서 배경, 뱃지를 제공해 줄 경우 없을 때보다 대회 참여율이 유의미하게 높아집니다.
(solved.ac에서 활동하는 사람들의 참여)

그렇기에 이번 대회에서도 뱃지, 배경을 만들어 제공하였습니다.


뱃지는 처음에 학교 관련 SNS 웹툰의 캐릭터를 사용하고자 하였지만 연락이 닿지 않았고, 대안으로 핌 동아리의 로고를 사용하였습니다.

동아리 로고이기에 범용성은 조금 떨어지지만, 첫 대회를 기념하는 느낌으로 진행하게 되었습니다.

다음으로는 배경인데, 배경은 세 가지 종류가 있습니다.

  1. 실사 배경
  2. 솔브드 자체 캐릭터 배경
  3. 시각 디자인 배경

위에서 이야기했듯 배경은 solved.ac에서 활동하는 사람들의 참여율을 높이기 위해 만듭니다.

2번이 solved.ac 상에서 인기가 많기에 2번 방향으로 배경을 만드는 것이 사람을 더 모을 수 있을 것 같았고, 자연스럽게 2번 방향으로 결정이 되었습니다.

다만, 저는 개인적으로 캐릭터 배경을 그다지 선호하지 않기에 추가로 학교를 배경으로 한 실사 배경을 만들고자 하였습니다.

하지만 가로로 긴 배경 특성상 적합한 사진을 가진 출제진이 없었고, 다른 곳에서 구하기에도 시간이 부족하여 결국 실사 배경은 취소되었습니다.

다음에 대회를 연다면 꼭 만들어 보고 싶네요.

캐릭터 배경은 민규형(jjkmk1013)과 어떻게 해야 컨셉에 맞으며 이쁜 디자인이 나올까 의논하였고, 결론적으로 막차 타고 집 가는 제 모습에서 아이디어를 얻은 알고리즘 파티가 끝나고 집에 가는 컨셉으로 결정되었습니다.

디자인이 결정된 이후 민규형이 솔브드와 컨택하였고 결과적으로 아래와 같은 감성적인 디자인이 나오게 되었습니다.

https://solved.ac/backgrounds/pimm2023


이렇게 모든 상품이 준비되었습니다.

대회 진행

시작과 스코어보드

대회는 텅 빈 스코어보드와 함께 시작됩니다.

대회에 참가할 때는 스코어보드가 아닌 문제부터 보기에 이렇게 텅 빈 모습은 처음이라 신기했습니다.

대회 진행중에 주로 했던 일은 스코어보드 관찰입니다.
어떤 문제가 풀렸는지, 풀리는 속도는 어떤지 확인하며 문제에 이상이 있는지 없는지 체크했습니다.

처음에는 문제에 이상이 있으면 어쩌지 하며 걱정했는데, 문제가 차츰 풀리면서 이상이 없다는 걸 확인한 뒤로는 정답 받은 코드 구경도 하고, 장난도 치면서 편하게 관찰했습니다.

없는 H번도 풀렸습니다.

질문 답변

스코어보드 관찰 외에는 질문 답변을 하였습니다.
대회 참가자가 질문페이지에 질문을 올리면 출제자가 답해주는 방식인데, 이번 대회의 경우 디스코드 채널에 웹훅을 걸어둬 알람이 오게 하였습니다.

덕분에 해당 페이지를 따로 체크하진 않고 알람이 울리면 답변하는 방식을 취했습니다.

검수가 깔끔하게 진행되고 대회 일주일 전에 어느 정도 마무리된 만큼 같은 큰 문제는 없었는데, 제 문제에서 열매 무게 범위를 누락하는 실수를 하여 공지하고 수정하였습니다.

열매 무게가 두 곳에서 주어지고 다른 한 곳에는 범위가 명시되어 있어 심각한 이슈는 아니었지만, 조금만 더 꼼꼼히 확인했다면 걸러졌을 이슈라 아쉬움이 남습니다.

난이도

위에서 이야기했듯 검수진(+ 출제진)는 검수 도중 난이도를 예측합니다.
이때 편의를 위해 검수 시트가 사용됩니다.

이번 대회는 난이도순 배치를 의도했기에 자연스럽게 저 예측 난이도에 따라 문제가 배치되었습니다.

문제의 난이도가 저 예측대로 흘러가면 정말 좋지만
대회 중에 사람들이 D번을 예상보다 어려워하였습니다.

D번이 F번보다 푼 사람 수가 적었고, 정답률은 9%까지 떨어졌습니다.
다만 정해가 게임 이론이었기에 이것을 DP가 아니라 게임 이론이구나! 판단하는 결론까지의 난이도가 사람마다 다를 수 있어 어느 정도 예상된 결과긴 했습니다.

최종적으로 위와 같은 난이도가 나오게 되었습니다.
D가 높게, G가 낮게 나온 것을 빼면 어느 정도 예상대로 난이도가 매겨졌습니다.

D와 E의 위치가 바뀌었다면 좋은 난이도 커브가 되었을 것 같아 조금 아쉬움이 남습니다.

마무리

에디토리얼

대회의 마지막 마무리는 에디토리얼(해설집) 및 수상자 선정입니다.

특히 이번 대회에서는 종현이의 노력으로 다른 대회에 비해서 에디토리얼이 매우 매우 이쁘게 나왔습니다.

ppt 형식이 아니라 책 형식으로 제작되었고, 해설뿐만 아니라 지문, 수상자, 특별상 추첨 코드까지 포함되어 있습니다.

제본하면 이런 모습!

수상자의 경우 전체에서 뽑아내거나 체크가 복잡한 케이스는 크롤링을 할 줄 아는 종현이가 열심히 코드를 짜서 뽑아내고 그 외는 출제진이 직접 체크해서 선정했습니다.

이렇게 해서 대회가 마무리되었습니다.

마지막으로

문제를 풀다 보면 사람 이름이 들어간 문제가 가끔 보입니다.
저는 그런 문제를 풀면서 나도 내 이름 들어간 문제 출제해 보고 싶다 생각했습니다.

그리고 그 생각이 이뤄졌습니다.
이제 백준에 근성 치면 아래와 같이 나옵니다.

백준 공식 나무 애호가 😎

신기하다, 열심히 하다 보면 진짜 되는구나 같은 생각이 먼저 들었고,
이후로는 이 정도면 많이 왔다 생각이 들면서도, 아직도 부족함이 많다 생각했습니다.

앞으로 부족한 부분 좀 채워보려 합니다. 🍀


대회의 총괄을 맡아준 박종현

좋은 문제를 출제해 준 고민규, 이윤수, 정영도, 최정환

그리고 검수를 해주신 검수진들에게 감사를 드립니다.

profile
~(~o~)~

4개의 댓글

comment-user-thumbnail
2023년 9월 10일

와 대회 출제랑 운영부터 후기 글까지 너무 흥미롭네요!! 수고했어요!!

답글 달기
comment-user-thumbnail
2023년 9월 11일

김근성! 김근성! 김근성! 김근성! 김근성! 김근성! 김근성! 김근성! 김근성! 김근성! 김근성! 김근성! 김근성! 김근성! 김근성! 김근성!

답글 달기
comment-user-thumbnail
2023년 9월 14일

ps 뉴비라 대회 개최부터 문제 출제 등의 과정이 궁금했는데 이렇게 글로 풀어주셔서 너무 감사합니다.

답글 달기
comment-user-thumbnail
2023년 9월 16일

🔥

답글 달기