Post

[교내대회] 코드마스터 경시대회 회고

2023년 2024년 2번의 대회를 진행하면서…

제 1회 코드마스터 경진대회 운영

알고리즘 대회를 운영하고 싶다는 생각은 이전부터 있었다. 생각해보면 복학하고 제일 재밌었던 것이 알고리즘이였고 그만큼 열심히 하기도 했다. 그리고 참가자들도 많은 시간쓰지 않고 가볍게 참가하고, 동기부여를 받을거라고 생각했다.

운영

하지만 직접 대회를 운영하기엔 대회 플랫폼, 문제 출제부터 예산까지 사실상 문제가 없는 곳이 없었다. 그러던중 백준의 그룹 시스템을 알게되었고, 그냥 학과와 동아리 사람들만 모집해서 작은 대회를 운영하면 좋을 것 같다는 생각이 들었다.

결론적으로 컴퓨터공학과의 한 교수님께서 도움을 주셔서 학과 예산을 조금 사용할 수 있게 되었고, 시상자에게는 학과장님의 직인이 들어간 상을 수여할 수 있게 되었다.

문제 출제

사실 가장 큰 문제는 문제 출제이다. 직접 문제를 출제할만한 능력도 없고, 백준의 그룹 시스템은 직접 문제를 출제할수도 없다. 결국엔 기존에 있는 문제를 사용할 수 밖에 없었는데 그래도 공정성을 위해 기준을 만들어서 출제했다.

  1. 이미 공개된 문제를 사용하므로 최대한 적게 풀린 문제
  2. 특정 언어를 사용했을 때 쉽게 풀리는 문제
  3. 특별한 선수지식이 없어도 풀리는 문제 1~2문제 (저학년의 참여)

이러한 기준으로 문제를 골랐다.

A. 과목 선택 https://www.acmicpc.net/problem/11948 (그리디)
B. 동전 복사 https://www.acmicpc.net/problem/28063 (그리디)
C. 북극곰은 괄호를 찢어 https://www.acmicpc.net/problem/25918 (자료구조, 스택)
D. 버섯 농장 https://www.acmicpc.net/problem/27737 (BFS, DFS)
E. 디저트 https://www.acmicpc.net/problem/17953 (DP)

후기

1

성공적으로 마무리했다. 다른 사람들이 보면 이런게 대회야? 라고 생각할수도 있고 대회치고 문제수준이나 참가자수준도 낮은편이지만 원하는걸 성공적으로 마무리했다는 성취감이 컸다. 그리고 학생들도 이런 대회를 계기로 동기를 부여받고 더 열심히 공부하는 계기가 생겼다고 생각한다.



제 2회 코드마스터 경시대회 참가

두번째 대회는 컴퓨터공학과 교수님께 연락이 왔다. 작년 대회를 바탕으로 보고서를 작성해서 지원금을 받을 수 있을 것 같다는 연락이였다. 정확하게 어떤 지원금인지는 잘 모르지만 국가사업의 지원금이라는 것만 들었다.

2

아무래도 외부의 예산을 사용하는 것이기 작년과 같이 운영하기에는 무리가 있었다. 올해는 문제 출제 및 전반적인 운영은 교수님께서 해주셨고, 대회 홍보나 시험 감독과 같은 잡무만 학생회에서 맡았다.

자연스럽게 교수님께서 운영을 하시게 되면서 나도 참가자의 자격으로 대회를 참가할 수 있게 되었다.

대회 진행

상금과 참가자가 많아졌다는 점 빼고는 작년과 크게 다르지 않았다. 2개의 실습실에서 나눠서 진행했고, 교수님 두분과 학생회 6명이 감독을 맡아주었다.

3

나는 자리에 앉아서 시작을 기다리고 있었다. 작년 내가 직접 기획하고 운영했던 대회에 참가한다는게 설레기도하고 긴장되기도 했다. 원래 내가 가장 참여하고 싶었던 행사를 기획한거였기 때문에 더 감회가 새로웠다.

드디어 증명의 시간인가…

문제는 총 5문제이고 미리 설치해둔 IDE를 사용하여 문제를 푼다. 당연히 검색은 허용되지 않는다. 나는 Pycharm IDE로 Python을 통해 대회를 진행했다.

A번

2007년

첫번째 문제는 가볍게 브론즈로 시작했다. 수학, 구현 분류의 알고리즘 이였고 당연히 크게 어렵진 않았다.

대회 시작전까지만 해도 크게 긴장되지 않았는데 막상 시간이 돌아가고 첫문제를 풀고 있는데 손이 너무 떨렸다. 다행히 크게 걸리는 부분 없이 한번에 풀어서 3분만에 1등으로 첫번째 문제를 해결했다.

B번

귀여운 라이언

실버1의 ‘두 포인터’, ‘슬라이딩 윈도우’ 분류의 알고리즘으로 어렵지는 않은 문제였지만 B번 문제는 실버 4~5정도 문제가 나오지 않을까? 생각했었는데 생각보다 난이도가 높았다.

큐를 이용하여 해결했고, 나중에 물어보니까 그리디로도 풀린다고 했다. 문제 분류를 크게 신경 안쓰고 풀면 쉽게 풀리는 것 같다.

C번

별 찍기 - 10

아주 익숙한 재귀 문제였는데 긴장을 해서 그런건지 도저히 떠오르지 않았다. 끝나고 확인해보니 2년전에 풀었던 문제인데 풀이가 전혀 떠오르지 않았다. 아마 그 당시에도 답을 보고 푼 것 같다.

결국 다른 문제를 다 풀고 마지막에 해결했고, 출력이 3 * 3, 9 * 9, 27 * 27의 정사각형 모양으로 나오는 것을 확인하고 배열을 만들어서 재귀로 채워서 풀었다.

풀고 나서 보면 쉽긴한데 대회라서 그런지 당시에는 진짜 생각이 안났다.

D번

선수과목 (Prerequisite)

‘다이나믹 프로그래밍’, ‘그래프 이론’, ‘위상 정렬’, ‘방향 비순환 그래프’ 문제 분류를 가진 골드5 문제이다. 문제 분류를 봤을 땐 평소에 풀었던 문제 분류들과 달라서 쉽지 않을 것 같다는 생각을 했다.

그래도 dfs와 dp를 통해 생각보다 쉽게 풀렸다. 지금 생각해보면 더 쉽게 풀 수 있는 문제였는데 익숙하지 않아서 코드가 조금 더럽게 나온 것 같다.

E번

1학년

대망의 마지막 DP 문제지만 B번 문제를 풀고 세번째로 풀었다. DP 문제였고 대회 당시 DP를 밀고 있어서 최근에 풀었던 문제랑 비슷해서 어렵지 않게 풀었다. DP에 익숙치 않거나 비슷한 유형의 경험이 없었으면 아마 제일 어려운 문제가 아니였을까 싶다.

특히 DP문제는 한번 생각에 구렁텅이에 빠지면 쉬운문제도 한없이 생각하게 된다. E번 문제를 어렵지 않게 풀었던게 이번 대회 가장 큰 행운이였던 것 같다.

결과

두구두구두구두구두구둑

4

1등 했다! C번을 마지막에 풀었는데 마지막 문제를 한번 틀리고 스코어를 봤는데 이미 다 푼 사람이 있었다. C번을 틀린것도 정말 간단한 실수를 한거라서 재제출을 한뒤 스코어를 보면서 빌었다… (제발… 내가 패널티가 더 낮아라…)

다행히 2등이 B번을 3번이나 틀려서 1등을 할 수 있었다. 나중에 물어보니 범위를 잘못 설정하는 간단한 실수를 했다고 한다. 대회날 신은 나의 편이였다.

후기

5

당연히 우물 안 개구리이다. 과거 UCPC 대회를 나갔을때 순위권은 커녕 문제 몇개 제대로 풀지도 못했고, 지금 다시 나간다고 해도 크게 다를게 없을 것 같다. 교내대회 우승이 엄청 대단한 업적이라고 생각하지 않는다.

그래도 내가 정말 참가하고 싶었던 대회를 직접 기획해서 운영해보고 다음년도에 그 대회에 직접 나가서 우승을 하는건 아무나 경험할 수 없는 거라고 생각한다. 정말 뿌듯했고 당시에 기분으로는 노력들이 보상받는 기분이였다.

이 대회를 통해 정말 많은 것을 얻었고 같이 참가한 학생들도 조금씩이라도 얻어가는 것이 있었으면 좋겠다.

This post is licensed under CC BY 4.0 by the author.