교내 대회의 운영진으로 참여하게 되어 문제를 제작해볼 수 있는 기회를 가졌다. 평소에 문제를 만들어보고 싶은 의향이 컸지만 제작 과정이 어떻게 되는지 접할 기회는 없었다. 이 글은 스스로의 문제를 만들어보고 싶지만 어떻게 만드는지 몰라서 생각만으로 그치는 사람들을 위한 글이다.
기본적으로 C++로 문제를 제작하는 과정을 다룬다.
문제를 제작하는 과정은 크게 다음과 같이 이루어졌다.
- 소재 선택 (알고리즘 선택)
- 지문 작성 (컨셉 없이, 딱 문제 상황에 대해서만)
- 풀이 작성
- Polygon에서 제작 진행
그런데 꼭 위의 상황처럼만은 이루어지지 않는다는 점을 알리고 싶다. 우선 지문을 작성해놓고 풀이를 알지 못해 넘기는 문제도 있었고, 의도하고 만든 문제들도 있었기에 상황에 따라 진행을 하면 된다. 1 / 2 / 3 까지는 평소에도 가볍게 진행할 수 있는 부분이어서 한 번 쯤은 해본 사람도 있을 것이다. 그러나 4번이 실질적으로 문제를 제작하기 위한 시작점이라고 볼 수 있다. 고로 4번에 관한 내용을 다루려고 한다.
Polygon은 문제 제작에 도움을 주는 사이트이다.
아래는 메인 화면이다.
로그인을 하고 View Contest
를 누르면 대회 그룹을 확인 할 수 있다.
Action
에서 Enter
를 누르면 해당 대회로 들어가게 된다. 이곳에서 대회 문제들을 하나씩 만들어나가면 된다. 우측 네비게이션 바에서 New problem
을 눌러 문제를 만들어보자.
시작 시 가장 처음 보게 되는 General Info
이다. 여기서 Time limit
과 Memory Limit
만 신경을 써주면 된다. Interactive
문제 또한 제작이 가능하다. (안 만들어봤지만..)
우선 메뉴바부터 설명을 해보도록 하겠다.Contest
해당 대회 전체 문제 창으로 넘어간다.View Problems
사용자가 속해있는 그룹들의 모든 문제를 보여준다.
General Info
문제의 기본 입출력 파일 / 시간 제한 / 메모리 제한 / 인터랙티브 여부를 설정 가능하다.Statement
지문을 작성하는 곳이다.Files
해당 문제에서 사용하는 모든 파일이 위치한 곳이다. generator
파일 또한 이곳에서 만들어서 사용한다.Checker
문제의 답안 (출력 데이터) 포맷을 검사하는 프로그램을 작성하는 곳이다. 기본적으로 제공되는 checker를 참고하여 작성을 할 수 있다.Validator
주어지는 입력 데이터의 포맷을 검사하는 프로그램을 작성하는 곳이다.Tests
특정 입력 데이터를 넣었을 때 솔루션 파일로 지정해놓은 파일이 뱉어내는 답안을 테스트할 수 있다.Solution files
답안 파일을 작성하는 곳이다. 정답인 소스코드와 오답인 소스코드를 다양하게 넣어보면 좋다.Invocations
여기서 집어넣어 놓은 모든 정답 / 오답 소스코드를 검증할 수 있다.Packages
모든게 완료되었다면 파일들을 패키지 형식으로 만들어주는 곳이다. (이 부분은 아직 제대로 모르기에 추후 추가적인 작성을 하려고 한다.)
여기서 변경되는 모든 사항은 반드시 Commit Changes
를 진행해야 다른 사람에게도 변경사항이 보인다.
그리고 checker
interactor
validator
generator
파일을 만들 때 testlib.h
헤더파일을 사용한다.
https://github.com/MikeMirzayanov/testlib/tree/master 해당 깃허브를 참고하면 금방 익숙해질 수 있을 것이다.
'알고리즘' 카테고리의 다른 글
[정수론] 백준과 함께 하는 정수론 - 1 (0) | 2023.08.27 |
---|---|
최소 스패닝 트리(MST, Minimum Spanning Tree) (0) | 2023.08.27 |
이분탐색 (Binary Search) (1) | 2023.08.27 |
최단 경로 알고리즘(1) (0) | 2023.08.27 |
Inversion Counting (0) | 2023.08.13 |