Appearance
Output-only 유형 문제
Output-only 유형 문제는 프로그램의 소스 코드를 제출하는 대신, 미리 공개된 입력 데이터에 대한 정답 텍스트 파일만을 제출하는 형태입니다.
문제 해결 방식
Output-only 유형의 문제를 풀이하는 방식은 앞선 Batch 문제와 근본적으로 다릅니다. 채점 서버에서 실행될 코드를 작성하는 것이 아니라, 문제에서 미리 공개한 고정된 입력 데이터를 로컬 환경에서 직접 처리하여 최종 출력 파일만 만들어 제출하기 때문입니다.
예를 들어 미로에서 시작점 S부터 도착점 E까지의 경로를 찾는 문제를 생각해 봅시다. 참가자는 길 찾기 알고리즘 코드를 제출하는 것이 아닙니다. 파일로 주어진 미로를 바탕으로 유효한 이동 경로를 로컬에서 알아낸 뒤, 그 경로 문자열이 담긴 텍스트 파일만을 서버에 제출합니다.
01.in.txt:
text
3 3
S..
.#.
..E01.out.txt:
text
RRDD이때 출력 파일을 만들어내는 방법에는 아무런 제한이 없습니다. 직접 작성한 프로그램을 로컬에서 실행하여 출력 파일을 생성해도 되고, 데이터의 크기가 작거나 규칙이 단순하다면 손으로 직접 계산해도 됩니다.
가장 중요한 차이는 프로그램의 실행 시간(Time Limit) 제한을 서버에서 강제받지 않는다는 점입니다. 채점은 오직 제출된 출력 파일의 내용만으로 이루어지므로, 참가자는 로컬 컴퓨터에서 충분한 시간을 들여 복잡한 연산을 수행하고 최적의 결과값을 도출할 수 있습니다.
IOI 환경과 제공 파일
Output-only 방식을 사용하는 대회에서는 참가자가 모든 테스트 케이스를 로컬에서 직접 처리할 수 있도록 압축 파일 형태의 자료를 제공합니다. 이 압축 파일에는 답을 구해야 할 입력 데이터와 결과를 확인하는 데 필요한 도구가 포함되어 있습니다.
1. 입력 데이터 파일 (tests/01.in.txt, tests/02.in.txt, ...)
참가자가 읽어 들여 답을 구해야 할 실제 테스트 케이스 입력 데이터 파일들입니다. 일반적인 Batch 문제에서는 이러한 입력 파일이 채점 서버에 비밀로 숨겨져 있지만, Output-only 문제에서는 참가자가 직접 처리해야 하므로 모든 입력 파일이 그대로 공개됩니다.
excavation 문제에서는 실제 입력 파일이 tests/01.in.txt부터 tests/06.in.txt까지 제공됩니다. 예제 설명용 파일은 examples/01.in.txt와 examples/01.out.txt입니다.
2. 검증기 (cpp/checker.cpp)
문제에 따라 정답이 여러 개일 수 있거나 조건을 만족하는 출력을 자유롭게 구성할 수 있는 경우, 참가자가 자신이 만든 출력 파일이 정답으로 인정되는지 로컬 환경에서 미리 확인해 볼 수 있도록 검증기 프로그램이나 그 소스 코드가 동봉됩니다.
예를 들어 미로 경로 찾기 문제의 검증기는 입력 파일과 참가자의 출력 파일을 함께 읽어, 해당 경로가 벽(#)을 통과하지 않고 미로를 벗어나지 않으면서 S에서 E까지 올바르게 도달하는지 판정합니다.
bash
./checker 01.in.txt 01.out.txt테스트 케이스와 서브태스크
제출된 출력 파일은 서버에서 각각의 테스트 케이스 번호에 맞춰 평가됩니다. 예를 들어 미로 경로 찾기 문제라면, 01.in.txt 파일에 주어진 미로를 읽고 이에 맞는 경로를 찾아 01.out.txt 파일에 RRDD를 적어 제출하는 과정 하나가 독립된 테스트 케이스입니다.
Output-only 문제는 대부분 정답이 하나로 정해지지 않고 "더 좋은 답"이 존재하는 최적화 문제로 출제됩니다. 이러한 문제에서는 각각의 입력 파일(또는 서브태스크)이 독립적으로 채점되며, 검증기가 참가자의 출력 품질을 점수로 환산하여 부분 점수를 부여합니다. 따라서 처음 제출에서 최고 점수를 만들지 못해도, 로컬에서 각 출력의 품질을 개선하며 점수를 올릴 수 있습니다.
부분 점수 채점의 예시
앞서 살펴본 미로 경로 찾기 문제가, 단순히 도착하기만 하면 되는 것이 아니라 가능한 한 짧은 경로를 찾는 최적화 문제로 출제되었다고 가정해 봅시다. 이 경우 부분 점수가 어떻게 매겨지는지 가상의 지문을 통해 살펴보겠습니다.
이 문제에서는 각각의 입력 파일 하나가 독립된 서브태스크가 되며, 서브태스크마다 미로의 크기와 함께 목표 경로 길이
| 서브태스크 | 점수 | 미로 크기 | 목표 길이 |
|---|---|---|---|
| 1 | 20 | 18 | |
| 2 | 20 | 96 | |
| 3 | 20 | 190 | |
| 4 | 20 | 980 | |
| 5 | 20 | 1960 |
참가자가 제출한 경로가 벽을 통과하거나 미로를 벗어나는 등 유효하지 않다면 해당 서브태스크는 0점으로 처리됩니다. 유효한 경로를 제출했다면, 그 경로의 길이를
즉 목표 길이
이처럼 참가자는 먼저 유효한 경로로 부분 점수를 확보한 뒤, 로컬에서 더 짧은 경로를 찾아 점수를 올릴 수 있습니다.
제출 방법
Output-only 문제에서는 제공된 입력 파일의 개수만큼 여러 개의 출력 파일을 생성하게 됩니다. tests/01.in.txt, tests/02.in.txt 등 다수의 입력 파일에 대해 로컬에서 01.out.txt, 02.out.txt 등의 출력 파일들을 만들어냅니다.
결과가 준비되면, 문제 지문과 CMS 화면에서 안내하는 방식에 따라 제출합니다.
- 어떤 문제는 여러 출력 파일을 하나의 압축 파일(
output.zip등)로 묶어 제출합니다. - 어떤 문제는 각 출력 파일을 개별적으로 제출합니다.
- 정확한 파일명과 제출 형식은 문제마다 다릅니다.
- Output-only 문제에서는 소스 코드를 제출하지 않습니다.
- 출력 파일 이름은
01.out.txt,02.out.txt처럼 번호별로 붙습니다.
2026 IOI 계절학교 온라인교육 CMS의 excavation 제출 화면에는 01.out.txt부터 06.out.txt까지의 개별 업로드 버튼과 submission.zip 업로드 버튼이 함께 있습니다. 따라서 이 CMS에서는 개별 파일 제출과 zip 제출이 모두 가능한 구조입니다.
submission.zip을 제출할 때는 01.out.txt, 02.out.txt, ..., 06.out.txt를 zip 최상위에 넣습니다. zip 안에 별도의 폴더를 만들지 않습니다.
제출 전에는 다음을 확인합니다.
- 각 출력 파일 이름이 문제에서 요구한 이름과 정확히 같은지 확인합니다.
- 필요한 경우 로컬
checker로 형식과 유효성을 확인합니다. - CMS가 요구하는 압축 형식이나 개별 제출 방식이 무엇인지 확인합니다.
검증기가 소스 코드(checker.cpp)로 제공되면 로컬에서 먼저 컴파일해 둘 수 있습니다. 아래 명령은 cpp 폴더 안에서 실행합니다.
Windows/WSL:
bash
g++ checker.cpp -std=gnu++20 -O2 -pipe -Wall -o checker
./checker ../examples/01.in.txt ../examples/01.out.txtmacOS:
bash
g++-13 checker.cpp -std=gnu++20 -O2 -pipe -Wall -o checker
./checker ../examples/01.in.txt ../examples/01.out.txt공통 제출 절차는 CMS 제출 방법 문서를 따릅니다.