TicTacToe
Top Player제출참여자
문제
크기의 보드 위에서 두 플레이어가 틱택토 게임을 진행합니다.
보드는 행 열부터 행 열까지 개의 칸으로 구성되며, 행 열의 칸을 로 표기합니다.
각 칸은 빈 칸 .과 선, 후공 플레이어의 말 O, X 중 하나의 상태를 가집니다. 초기에는 다음과 같이 말이 배치됩니다.
| 상태 | 개수 | 초기 배치 |
|---|---|---|
빈 칸 . |
부터 까지 보드 전체 | |
선공 플레이어의 말 O |
없음 | |
후공 플레이어의 말 X |
없음 |
게임은 선공 플레이어부터 시작해 두 플레이어가 번갈아 턴을 진행합니다.
플레이어는 자신의 턴에 빈 칸 를 골라 자신의 말을 놓습니다.
다음은 선공 플레이어가 에 말을 놓는 예시입니다.

게임은 다음 조건 중 하나가 만족될 때 종료됩니다.
- 가로 혹은 세로 혹은 대각선 방향으로 같은 말이 개 연속으로 놓이면 해당 말을 놓은 플레이어가 승리합니다.
- 보드의 모든 칸이 채워졌음에도 승리 조건을 만족한 플레이어가 없다면 무승부로 종료됩니다.
보드의 최종 승자가 되기 위한 AI를 설계해주세요!
입력
채점기는 다음의 한 줄 단위로 플레이어와 통신합니다.
| 명령어 | 채점기→플레이어 (입력) | 플레이어→채점기 (출력) | 시간 제한 (ms) | 설명 |
|---|---|---|---|---|
| READY | READY (FIRST or SECOND) |
OK |
3000 |
선공/후공 정보를 알립니다. |
| TURN | TURN my_time opp_time |
MOVE x y |
my_time |
내 남은 시간과 상대의 남은 시간을 알립니다. 이번 턴에 내가 말을 놓을 칸 를 출력합니다. |
| OPP | OPP x y time |
- | - | 상대가 직전에 둔 수와 사용한 시간을 알립니다. |
| FINISH | FINISH |
- | - | 게임 종료를 알립니다. 플레이어는 추가 출력 없이 프로그램을 정상 종료해야 합니다. |
x,y는 정수입니다.my_time,opp_time,time은 정수이며, 시간은 밀리초(millisecond) 단위로 주어집니다.- 모든 출력 후에는 개행문자를 출력한 뒤 버퍼를 flush해야 합니다.
- 시간 제한이 있는 명령에서 출력을 제한 내에 수행하지 않으면 시간 초과(
TLE) 판정을 받습니다. - 출력 형식에 맞지 않는 문자열을 출력하거나, TURN 명령어가 주어질 때 합법적이지 않은 수를 출력하면 런타임 에러(
RE) 판정을 받습니다.
예시
| 선공 입력 | 선공 출력 | 후공 입력 | 후공 출력 |
|---|---|---|---|
READY FIRST |
READY SECOND |
||
OK |
OK |
||
TURN 10000 10000 |
|||
MOVE 1 1 |
|||
OPP 1 1 50 |
|||
TURN 10000 9950 |
|||
MOVE 2 1 |
|||
OPP 2 1 20 |
|||
TURN 9950 9980 |
|||
MOVE 2 2 |
|||
OPP 2 2 50 |
|||
TURN 9980 9900 |
|||
MOVE 3 3 |
|||
OPP 3 3 20 |
|||
TURN 9900 9960 |
|||
MOVE 1 2 |
|||
OPP 1 2 50 |
|||
TURN 9960 9850 |
|||
MOVE 3 2 |
|||
OPP 3 2 20 |
|||
TURN 9850 9940 |
|||
MOVE 1 3 |
|||
FINISH |
FINISH |
마지막 MOVE 1 3 이후 보드의 상태는 본문의 사진과 동일합니다.
샘플 코드
- C20 : sample.c
- CPP20 : sample.cpp
- PYTHON3, PYPY3 : sample.py
제한
- 시간 : 각 플레이어에게 주어지는 첫 번째 TURN 명령어에서
my_time은 입니다. - 메모리 :
- 채점 환경 : HELP > 채점 환경
