코드 복사/붙여넣기 하는 당신이 아름답습니다.

이전 글의 연장선으로 작성하는 글입니다.

적다가 귀찮아서 때려칠 수도 있어요…

이 글의 전제는 대회를 위한 문제 세트를 만드는 과정입니다.

저는 지금까지 36문제 정도를 출제했고, 검수한 문제까지 합치면 이거보다 좀 더 많겠네요. (욱제가 낸 문제 목록)

초창기에 낸 문제들은 진짜 개구데기같은 지워버리고 싶은 문제들밖에 없는데

요즘 내는 문제들은 그래도 어디 가서 쌍욕은 안 먹을 정도로 내는 것 같습니다. (아닌가? ㅎㅎ)

문제를 내기 전에

  1. 참가자의 실력
  2. 출제진의 실력
  3. 검수진의 실력
  4. 희망하는 대회 퀄리티

를 파악해야 한다고 이전 글에서 말했습니다.

적당히 수준에 맞는 문제를 내면 됩니다.

문제를 만들 때 중요한 것

저는 문제를 만들 때 아래와 같은 것들을 중요하게 생각합니다.

  • 문제 유형 배분
    • 문제 수가 많은 세트 아니고서는, 문제 유형이나 풀이가 겹치지 않는 것을 선호합니다.
  • 문제 난이도 배분
    • 가급적이면 난이도 분포가 정규 분포가 되도록 합니다.
    • 노솔브 방지 문제를 꼭 넣습니다.
  • 지문을 얼마나 읽기 좋게 쓰는가
    • 쓸데없는 미사여구, 쓸데없는 스토리, 쓸데없는 잡소리 쓰지 마세요.
    • 나만 아는 이상한 얘기 쓰지 마세요.
    • 써도 되는데, 선 넘지 마세요. 가독성을 해치지 마세요.
    • 예를 들면 이런 거: 대회 운영진 욱제와 대회 운영진이자 욱제의 절친인 영준이는 숭실대 쓰리팝 피씨방에서 요즘 핫한 RPG 게임을 하는데 물리 방어력과 체력이 높은 몬스터인 뒤틀린 황천의 고블린을 N마리 잡았더니 완전 희귀한 확률로 드랍되어서 초고가에 거래되는 고블린의 숨겨진 황금 활이 K개 드랍됐다.
  • 맞춤법
    • 세종의 후예 아니겠습니까?
  • 기타
    • 특별한 이유가 없으면, 코딩이 간단한 방향으로 입출력 형식을 주려고 합니다.
    • 특별한 이유가 없으면, 같은 풀이라도 조금 더 코딩이 간단한 방향으로 문제를 내려고 합니다.
    • 특별한 이유가 없으면, 그리디 문제는 잘 내지 않습니다.
    • 일단 그리디는 증명하기가 귀찮고(?), 출제자 입장에서 난이도를 가늠하기가 어렵습니다.

문제를 내는 과정

출제진이 많다면 총괄자가 있는 것이 좋습니다.

그리고 이 총괄자는 출제진들이 트롤할 때 적절히 브레이크를 걸 수 있어야 합니다.

안 그러면 서로 자기 실력을 뽐내다가 미친 헬셋이 나오는 등 대회가 망할 수 있습니다. (…)

미리 어떤 문제를 내면 좋겠다.를 주문해 놓고 출제를 시작하면 좋은 세트를 만들 수 있습니다.

보통의 work flow는 아래와 같습니다.

  1. 문제 아이디어 스케치
  2. 문제 풀이 구상
  3. 지문 제작
  4. 풀이 작성
  5. 데이터 제작
  6. 검수

문제를 만드는 방법

풀이를 먼저 정하고 내는 방법도 있고, 일단 문제를 내고 풀이를 떠올리는 방법도 있습니다.

문제를 내다 보면 최초에 의도했던 방향과 멀어지는 경우가 많은데

이때 정신을 차리고 이대로 내도 괜찮은지, 버리고 다른 걸 내는 게 좋은지 잘 판단해야 합니다.

정신 못 차리고 그냥 내면 나중에 출제진들 문제 다 합쳤을 때 망할 수 있습니다. (…)

아 그리고 당연히 출제자의 풀이가 틀리면 안 됩니다.

내 풀이에 확신이 없다면, 검수진이나 다른 출제진에게 도움을 요청해서 확인하는 방법이 있습니다.

데이터를 만드는 방법

  1. 손으로 노가다 하기
  2. 랜덤 데이터 찍기
  3. 코드로 적당한 코너케이스 찍기

대부분의 문제에서 2는 좋은 선택이 아닙니다.

하지만 이 문제처럼 랜덤으로 대충 찍어도 데이터가 강할 수 있으니 잘 판단해야 합니다.

아 그리고 c언어로 데이터 만들 때 절대 rand() 쓰지 마세요…

대신 C++ mt19937 쓰세요. 이유는 직접 찾아 보시면 됩니다.

이상한 말도 안 되는(시간초과, 틀린 풀이 등) 풀이가 통과하거나, 예외를 못 잡는 코드가 통과할 수도 있습니다.

이러한 코드를 직접 작성해 보고 코너케이스를 넣어야 합니다.

이 작업은 검수진과 협력할 수 있습니다.

또 뭘 적지

귀찮네요

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이, 내가 문제를 내는 방법, 알고리즘 문제 내는 법, 알고리즘 문제 출제, 프로그래밍 대회, 문제 출제, 내가 대회를 여는 방법, 알고리즘 대회 여는 법, 알고리즘 대회 개최

wookje.kwon's profile image

wookje.kwon

2019-08-29 15:41

Read more posts by this author