출제 안내
출제 흐름
출제 권한
출제 제안 기능은 운영자가 등록한 출제자와 운영자만 사용할 수 있습니다. 권한이 필요하면 운영 연락처로 GitHub 계정명을 전달하세요.
-
문제 작성
General · Statement -
테스트케이스 구성
Tests테스트케이스는 직접 입력하거나 Generator로 만듭니다.
Sample은 공개 예제이면서 실제 채점 대상입니다. 예제부터 순서대로 채점하며 입력과 정답이 모두 같은 일반 테스트는 중복 채점하지 않습니다.
-
정해와 파일 등록
Solutions · FilesMCS.cpp에는 정답 코드를 등록하고, 모든 문제에 필수인val.cpp를 Files에서 저장합니다.- Validator: 공용
testlib.h와registerValidation(argc, argv)를 사용합니다. 값·문자열은inf.readInt/readLong/readToken, 구분자는inf.readSpace/readEoln, 입력 끝은inf.readEof로 검사하며 숫자나 줄을 직접 파싱하지 않습니다. 저장 입력은 LF 개행을 기준으로 하고 마지막 개행 여부는 문제 형식에 맞게 검사합니다. 범위 초과·잘못된 공백이나 개행·여분 토큰도 거부하며, testlib 표준 API로 표현할 수 없는 조건만 읽은 값에 추가로 검사합니다. 예외가 필요하면 검토 요청에 이유를 남깁니다. - Generator·Checker: Generator를 사용하면
gen.cpp를 작성하고, Special Judge가 필요한 경우에만checker.cpp를 추가합니다. - 솔루션 검수: 독립 정해·오답 코드와 기대 판정을 저장할 수 있습니다. Packaging 후 모든 Sample·Normal 테스트를 검사하며 AC는 전체 통과, WA·TLE·MLE·RTE는 해당 실패가 한 번 이상 있어야 합니다. CE·SE는 기대 충족으로 보지 않습니다. AC 또는 TLE/MLE는 전체 테스트가 해당 두 판정 중 하나여야 합니다. 결과에는 테스트별 판정·시간·메모리와 새 입력이 표시됩니다.
- 검수 소스: 일반 제출·랭킹과 분리되며, 수동 검수 소스는 게시·내보내기에 포함되지 않습니다. Polygon 원본은 tag/type과 함께 가져오며 미지원 항목은 실행 전에 직접 매핑합니다. 합계 100개, 소스당 64 KiB까지 저장합니다.
- Validator: 공용
-
OUT 파일 생성
PackagingGenerator와 MCS를 실행해 최종 채점에 사용할 입력과 OUT 파일을 만듭니다. Packaging은 저장된
val.cpp로 모든 입력을 먼저 검사하며 실패하면 패키지를 교체하지 않습니다.생성 작업은 일반 채점을 우선 처리한 뒤 실행됩니다. Packaging 화면에서 상태를 확인합니다. 실행 중 초안을 수정하면 이전 결과는 반영되지 않으며, 이 경우나 작업이 중단된 경우 현재 내용을 저장한 뒤 다시 요청합니다.
-
검토 요청
Review작성이 끝나면 Review에서 검토 요청을 보냅니다. 운영자가 지문·테스트케이스·정해·채점 방식을 확인한 뒤 등록합니다.
val.cpp가 없거나 비어 있으면 검토 요청과 기존 문제의 수정 반영을 진행할 수 없습니다. 검토 대기 중에는 편집·패키지 재생성·삭제를 할 수 없으며, 반려되면 사유를 수정한 뒤 다시 요청합니다. 승인된 제안은 목록에서 정리되고 게시된 문제와 채점 자료는 유지됩니다.
Polygon 패키지
Polygon ZIP에서 새 출제 제안이나 수정 권한이 있는 문제의 수정본을 만들 수 있습니다. 기존 문제와 작성 중인 제안은 덮어쓰지 않습니다.
- 가져오기: 최대 48 MiB입니다. 지문·제한·준비된 테스트와 정답·소스·자료를 가져오고, 지원하지 않는 언어·테스트 그룹·generator 명령은 결과에서 경고합니다. 가져온 내용을 확인한 뒤 Packaging과 Review를 진행합니다.
- 입력 변경: 가져온 입력을 바꾸면 기존 정답을 재사용하지 않습니다.
MCS.cpp와 필수val.cpp를 확인합니다. - 내보내기: 문제 상세의 Polygon ZIP 버튼을 사용합니다. ZIP에는 비공개 테스트와 정답 소스가 포함될 수 있으므로 공유 범위를 확인합니다.
- 큰 입력: Tests에서 파일로 추가·교체합니다. UTF-8 입력은 파일당 32 MiB·전체 512 MiB이며, 편집 화면에는 크기·SHA-256·앞 4,096자만 표시합니다. 공개 예제는 파일당 1,000,000 bytes까지 지원합니다.
- Generator와 검수 제한: SOJ Generator의 일반 입력은 파일당 96 MiB까지 생성할 수 있지만, 이를 Polygon에서 TEXT 입력으로 다시 가져오려면 32 MiB 이하여야 합니다. 별도 솔루션 검수는 테스트 200개·파일당 32 MiB·복사본 전체 256 MiB까지 지원합니다. 내보내기에 성공해도 가져오기나 솔루션 검수의 상한을 충족한다는 뜻은 아닙니다.
문제 컨벤션
기본 제한 시간 1000ms · 메모리 512MB
알고리즘이나 실행 특성상 다른 제한이 필요하면 근거와 함께 조정합니다. 언어별 보정은 실행 환경에서 확인하세요.
지문 컨벤션
아래 규칙은 문장에 명시된 조건과 예외를 포함해 모두 반드시 지킵니다.
문장 구성
- 문제의 조건과 요구사항은 간결하고 직접적으로 설명합니다. 배경이나 등장인물은 문제의 이해 또는 재미에 도움이 되는 경우에 사용합니다.
- 문자열의 문자 종류를 설명할 때는
알파벳 소문자로 이루어진 문자열 $S$처럼이루어진을 사용합니다. - 두 값 사이의 차를 나타낼 때는
차를 사용합니다. - 값 자체를 나타낼 때는
최대값,최소값대신최댓값,최솟값을 사용합니다. - 같은 대상은 지문 전체에서 같은 용어와 기호로 지칭합니다. 같은 의미의 대상을 이유 없이 다른 용어·기호로 바꾸지 않습니다.
정의와 조건
- 변수·기호·용어는 처음 사용하기 전에 의미를 정의합니다.
- 수의 범위를 설명할 때
자연수를 사용하지 않습니다. 0의 포함 여부에 따라양의 정수또는음이 아닌 정수로 정확하게 구분합니다. - 수열, 문자열, 그래프 등의 인덱스나 번호는 처음 정의할 때 시작 위치와 범위를 명확히 적습니다.
예:
길이가 $N$인 정수 수열 $A_1, A_2, \cdots, A_N$이 주어진다. - 풀이와 입력 해석에 영향을 주는 보장 조건은 명시합니다. 그래프의 연결성·방향성·중복 간선, 수열의 중복 원소 여부 등이 해당하는 경우에만 설명합니다.
- 지문에 명시한 입력 조건과 validator가 허용하는 입력은 일치해야 합니다. 지문에 없는 조건을 validator에서만 강제하거나, 지문의 조건을 만족하지 않는 입력을 validator가 허용하지 않습니다.
입력
- 입력 설명은
~이(가) 주어진다.형식을 사용합니다. - 서수는
첫 번째 줄,두 번째 줄처럼 표기합니다. - 여러 줄에 걸쳐 입력이 주어질 때는
두 번째 줄부터 $N$개의 줄에 걸쳐형식을 사용합니다. - 본문에서 값의 의미를 설명하지 않았다면
~의 개수/수/길이를 의미하는 (정수 / 실수 등) (변수)가 주어진다.형식을 사용합니다. 본문에서 변수의 의미를 이미 설명했다면 이를 반복하지 않고(정수 / 실수 등) (변수)가 주어진다.형식을 사용합니다. - 한 줄에 여러 값이 공백으로 주어질 때는
공백으로 구분되어 주어진다.형식을 사용합니다. - 입력값의 수치 제한은 입력 설명에서 해당 변수나 상수가 처음 등장하는 문장에 적습니다.
값의 범위·오름차순·서로 다름·간단한 대소 관계처럼 짧은 수식만으로 의미가 분명한 조건은
자연어로 반복하지 않고 해당 문장 뒤의 괄호 수식으로 작성합니다.
예:
두 번째 줄에 수열의 원소 $A_1$, $A_2$, $\cdots$, $A_N$이 공백으로 구분되어 주어진다. $(-10^9 \le A_i \le 10^9; A_1 < A_2 < \cdots < A_N)$그래프의 연결성처럼 구조적이거나 별도의 해석이 필요한 보장 조건은 문장으로 설명합니다. - 테스트케이스가 여러 개라면 테스트케이스 개수, 각 테스트케이스의 입력 구조와 적용 범위를 명시합니다. 모든 테스트케이스에 걸친 입력 크기의 합에 제한이 있다면 각 테스트케이스의 제한과 구분해 적습니다.
출력
- 출력 설명은
~을(를) 출력한다.형식을 사용합니다. - 정확히 출력해야 하는 문자열은 백틱으로 감싸 표기합니다.
Yes/No 출력은
~수 있다면 `Yes`를, 그렇지 않다면 `No`를 출력한다.형식을 사용합니다. - 정답이 여러 개여도 모두 허용한다면
가능한 정답이 여러 개라면 그중 아무거나 출력한다.형식을 사용합니다. - 정답이 존재하지 않을 수 있다면 그 경우에 출력할 값을 명시합니다. 테스트케이스마다 출력해야 한다면 출력 단위와 순서도 설명합니다.
수식
- 모든 수학 변수와 식은 math mode로 작성합니다.
예:
$N$,$A_i + B_i$ - 표준 수학 함수와 연산자는 일반 텍스트로 적지 않고 해당 TeX 연산자 명령을 사용합니다.
예:
\sin,\cos,\log,\max,\min,\gcd - 수식 안에 자연어를 작성할 때는
\text{...}를 사용합니다. 예:$x = 0 \text{ 또는 } x = 1$ - 수는
$1\,000$,$100\,000$처럼\,로 세 자리씩 끊어 적습니다.$10^6$이상이고 거듭제곱으로 자연스럽게 표현할 수 있다면$10^b$또는$a \cdot 10^b$꼴로 표기하며 계수가 1이면 생략합니다.$998\,244\,353$처럼 문제에서 자주 쓰이는 중요한 수는 예외적으로 전부 적습니다. - 소수 등 풀이에 영향을 주는 중요한 수는 지문에서 명시합니다.
예:
$10^9 + 7$로 나눈 나머지를 출력한다.$10^9 + 7$은 소수이다. - 제한 조건의 괄호는 수식 안에 포함하고, 독립적인 여러 조건은 세미콜론으로 구분합니다.
예:
정수 $N$이 주어진다. $(1 \le N \le 10^6)$,$(1 \le u_i, v_i \le N; u_i \ne v_i)$ - 부등호는 같은 의미의 표기 중
\le,\ge로 통일합니다. - 변수의 단순 나열에 쓰는 쉼표는 수식 밖에 작성합니다.
예:
두 정수 $u_i$, $v_i$가 주어진다.순서쌍 등 수학적 표현의 쉼표는 수식 안에 둡니다. 예:점 $(x_i, y_i)$가 주어진다. - 연속된 변수나 항을 나열할 때는
\cdots를 사용합니다. 예:$A_1, A_2, \cdots, A_N$ - 절댓값이나 집합·문자열의 크기 등을 나타내는 세로줄은
|대신\lvert,\rvert를 사용합니다. 조건이나 나눗셈 관계를 나타내는 세로줄은\mid를 사용합니다. 예:$\lvert x \rvert$,$\lvert S \rvert$,$\{x \mid 1 \le x \le N\}$,$a \mid b$ - 블록 수식도 문장의 일부로 취급합니다. 블록 수식으로 문장이 끝나면 수식 안에 마침표 등 필요한 문장부호를 작성합니다.
예제 설명
- 예제만으로 정답을 이해하기 어렵다면 답이 도출되는 핵심 과정을 설명합니다. 입력과 출력을 그대로 반복하는 설명은 생략할 수 있습니다.
- 정답이 여러 개인 문제의 예제 설명은 제시한 출력이 유효한 이유를 설명하며, 해당 출력만 정답인 것처럼 서술하지 않습니다.