내가 대회 개최를 할 수 있을 리 없잖아, 무리무리! (※무리가 아니었다?!)

NeCu1029·2026년 7월 24일

프로젝트 회고

목록 보기
6/6

2026년 7월 7일에 진행한 2026 GSHS 2-1 1학기 PS 대회, 그리고 14일에 진행한 Open Contest를 주최했습니다. 대회 준비의 타임라인은 저도 제대로 기억이 나지 않는 관계로 넘어가고, 각 문제의 풀이와 대회 개최를 하면서 느낀 점에 대해 적어 보려고 합니다. 문제는 @dadas08이 만든 온라인 저지인 DOJ에서 볼 수 있습니다.

문제 풀이

A. JANE DOE

주어진 정수 NN을 최대한 많은 개수의 소수의 합으로 나타내는 문제입니다. 가장 작은 소수인 22를 최대한 많이 쓰고, NN이 홀수라면 마지막에 33을 한 번 써 주면 됩니다. 시간 복잡도는 출력 때문에 O(N)O(N)입니다.

B. 4분 33초

unsigned int 자료형의 오버플로를 이용하는 문제입니다. b의 값이 216=655362^{16}=65\,536이라면, b * b의 값은 2322^{32}가 되어야 합니다. 그러나 이는 unsigned int의 최댓값보다 11 큰 값이므로, 실제로는 최솟값인 00이 됩니다. 따라서 65536을 출력하면 답이 됩니다. 시간 복잡도는 O(1)O(1)입니다.

만약 오버플로를 모른다면, 답이 없는 문제를 냈을 리는 없으니 해당 코드를 그대로 넣고 브루트 포스를 돌려도 대회 시간 내에 답을 구할 수 있었습니다. 뿐만 아니라, b11부터 차례대로 대입하는 브루트 포스는 그냥 제출해도 시간 내에 돌아갑니다.

C. 경기과학고등학교 교가

어떤 산과 어떤 물을 잡았을 때, 산까지의 거리와 물까지의 거리 합이 최소가 되는 점은 산과 물을 잇는 선분 위의 점입니다. 거리 합은 당연히 선분의 길이겠죠. 따라서 모든 산과 물의 쌍에 대해 선분의 길이를 구하고, 최솟값을 출력하면 됩니다. 시간 복잡도는 O(NM)O(NM)입니다.

D. Panorama

사진의 시작은 +1+1로, 사진의 끝에서 한 칸 뒤는 1-1로 기록해 준 뒤, 모든 말단을 모아 위치에 따라 정렬해 줍니다. 이제 정렬한 말단 배열을 쭉 순회하면서 정확히 한 장의 사진만 있는 구간의 총 길이 LL과 개수 XX를 구합니다. X=0X=0이라면 0을 출력해 주고, 그렇지 않다면 LM+X1LM+X-1이 답이 됩니다.

개최를 하면서

  1. 문제는 실제로 대회에 나오지 못하더라도 충분히 많이 만들어 두는 것이 좋습니다. 본 대회의 모든 문제는 3월에 미리 만들어 두었는데, 그렇지 않았다면 위기 상황 대처가 쉽지 않았을 것 같았습니다. 실제로 원래 D는 다른 문제였는데, 대회 개최 며칠 전 검수진 사이에서 그 문제가 그다지 좋지 않다는 평가가 나왔습니다. 다행히 현재 D가 미리 준비된 덕분에 바로 대체할 수 있었습니다.

  2. 대회 개최의 목적을 잘 고민해야 합니다. 이 글을 인용하자면, "단순히 대회 개최를 목적으로 대회를 개최하지" 말아야 합니다. 본 대회를 개최한 본래 목적은 작년에 @gs25001이 개최한 학급 대회의 계승이었지만, 이대로라면 대회 개최가 목적인 것과 다를 것이 없습니다. 따라서 목적을 'PS를 열심히 하지 않는 사람의 PS 입문'으로 잡았고, 쉬운 문제 몇 개를 긴 호흡으로 풀 수 있도록 구성하였습니다.

  3. 행정 처리는 미리 하는 것이 매우 좋습니다. 참가자 모집을 6월 말에 받았는데, 대회 일정과 상당한 수의 사람들이 참가하는 연구 활동 일정이 겹쳐 버리는 바람에 많은 잠재적 참가자를 잃게 되었습니다. 인원이 2명이나 변경되어 시설 사용 신청을 계속 갱신해야 하기도 했고, (여담 1 참고) 참가자 중 한 명의 대회 registration이 불가능해진 이슈 때문에 대회가 10분 지연되는 일도 있었습니다. (여담 2 참고)

여담

1. 시설 사용 신청 같은 곳에 3번 한 썰

경기과학고등학교는 야간 자율 학습 시간에 교실에서 여러 명이 모여 학습 활동을 하는 것을 허용합니다. 단, 사전에 사용 신청을 해 두어야 합니다. 이번 대회 장소도 이 제도를 활용해 교실 하나를 잡기로 했습니다. 참가 인원이 확정된 후 대회 이틀 전에 미리 신청을 해 놓았는데, 전날에 이런 일이 생깁니다.

어쩔 수 없죠. 기존 신청을 취소하고 다시 신청해야 합니다. 그러나 신청 취소는 승인해주신 선생님께서 직접 하셔야 했기에, 선생님께 말씀드린 뒤 다시 신청했습니다. 그런데 대회 당일 낮...

ㅠㅠㅠ

결국 다시 신청할 수밖에 없었고, 한 번의 시설 사용을 위해 세 번의 신청을 하는 희귀한 경험을 하게 되었습니다.

2. @dadas08 나가라 우우

현재는 사라졌지만, 본 대회를 진행할 때까지만 해도 DOJ에는 기묘한 판정이 있었습니다. 바로 Discord 연동을 통한 인증 없이는 대회에 참가할 수 없는 것이었습니다. 이것을 전에 친구에게 들었지만, 사이트 운영자인 @dadas08에게 문의하였을 때 그렇지 않다는 답변을 받았기 때문에 대회장에서 registration을 해도 되겠다고 생각했습니다.

그렇게 별도의 안내 없이 대회장에 갔고, 참가자들이 오기 시작했습니다. 대부분의 참가자들은 이미 인증을 해놓은 상태였고, 당연히 registration도 할 수 있었습니다. 그런데, 한 참가자만 이것이 계속 안 되었습니다. Discord 인증이 되어 있지 않았기 때문이었고, 설상가상으로 Discord 계정 자체가 없다고 합니다. 일단 @dadas08에게 연락을 하는 동시에 그 참가자에게는 계정을 생성하도록 안내했습니다. 다행히 개발은 Codex를 사용하여 빠르게 진행되었지만, 배포가 오래 걸린다고 합니다.

결과적으로 대회 시간을 15분 미루어 진행하였고, 그 시간 안에 배포가 완료되지는 않았지만 급하게 만든 Discord 계정으로 인증에 성공했습니다.

3. 특별상 기준

본 대회의 특별상 기준은 다음과 같았습니다.

  1. [BOMB] - 코카콜라 or 스프라이트 택1 (조건: A에서 TLE, MLE, OLE 중 하나 이상과 AC가 모두 존재)
    : A의 문제 제목이 <극장판 체인소 맨: 레제편>의 엔딩곡인 "JANE DOE"였고, 지문에도 "폭탄의 악마"가 직접적으로 등장하였습니다. 그래서 특별상 이름을 "BOMB"으로 하고, 상품도 가장 얻기 쉬운 폭탄인 탄산음료로 했습니다. 조건은 A에서 한 번 터지고 맞는 것으로 했습니다.

  2. [ ] - 스톱워치 1개 (조건: B를 대회 시작 후 4분 33초와 가장 가까운 시각에 해결)
    : "4분 33초"를 4분 33초에 풀면 됩니다. 참 쉽죠?

  3. [경곽인이라면 이 정도는 할 수 있죠?] - 카스타드 1박스 (조건: C를 O(NM)O(NM) 미만에 해결)
    : 검수진 중 한 명이 C를 O(NM)O(NM) 미만에 푸는 방법이 없는지 물어본 적이 있습니다. 뭔가 있을 것 같았지만, 저는 찾을 수 없었기 때문에 특별상으로 걸었습니다. 당연히 본 대회에서도 아무도 찾지 못했고, 카스타드는 랜덤 1인에게 주었습니다.

  4. [팬이에요] - 볼펜 2개 (조건: D에서 AC를 받은 코드의 바이트 수와 2018083120\,180\,831의 GCD가 최대)
    : D는 걸그룹 IZ*ONE과 관련된 문제이고, 아이즈원의 결성일은 2018년 8월 31일입니다. 또한 2018083120\,180\,83111111919를 소인수로 갖기 때문에, 한 명쯤은 바이트 수와의 GCD가 11이 아니지 않을까 하고 생각했습니다. 하지만 모든 정답자에 대해 GCD가 11이었고, 정답자 중 랜덤 1인에게 상품을 주었습니다.

마무리

2학기에는 @gs25001이 대회 개최를 할 예정입니다. 경기과고 43기라면 본 대회, 그렇지 않다면 Open Contest 많은 관심 부탁드립니다.

profile
경기과고 43rd

0개의 댓글