쿠키 설정

서비스 개선을 위해 분석 쿠키를 사용합니다. 자세히 보기

ALPHANO 로고

TicTacToe

Top Player제출참여자

문제

3×33 \times 3 크기의 보드 위에서 두 플레이어가 틱택토 게임을 진행합니다.

보드는 1111열부터 3333열까지 99개의 칸으로 구성되며, xxyy열의 칸을 (x,y)(x, y)로 표기합니다.

각 칸은 빈 칸 .과 선, 후공 플레이어의 말 O, X 중 하나의 상태를 가집니다. 초기에는 다음과 같이 말이 배치됩니다.

상태 개수 초기 배치
빈 칸 . 99 (1,1)(1, 1)부터 (3,3)(3, 3)까지 보드 전체
선공 플레이어의 말 O 00 없음
후공 플레이어의 말 X 00 없음

게임은 선공 플레이어부터 시작해 두 플레이어가 번갈아 턴을 진행합니다.

플레이어는 자신의 턴에 빈 칸 (x,y)(x, y)를 골라 자신의 말을 놓습니다.

다음은 선공 플레이어가 (1,3)(1, 3)에 말을 놓는 예시입니다.

게임은 다음 조건 중 하나가 만족될 때 종료됩니다.

  • 가로 혹은 세로 혹은 대각선 방향으로 같은 말이 33개 연속으로 놓이면 해당 말을 놓은 플레이어가 승리합니다.
  • 보드의 모든 칸이 채워졌음에도 승리 조건을 만족한 플레이어가 없다면 무승부로 종료됩니다.

보드의 최종 승자가 되기 위한 AI를 설계해주세요!

입력

채점기는 다음의 한 줄 단위로 플레이어와 통신합니다.

명령어 채점기→플레이어 (입력) 플레이어→채점기 (출력) 시간 제한 (ms) 설명
READY READY (FIRST or SECOND) OK 3000 선공/후공 정보를 알립니다.
TURN TURN my_time opp_time MOVE x y my_time 내 남은 시간과 상대의 남은 시간을 알립니다. 이번 턴에 내가 말을 놓을 칸 (x,y)(x, y)를 출력합니다.
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 이후 보드의 상태는 본문의 사진과 동일합니다.

샘플 코드

제한

  • 시간 : 각 플레이어에게 주어지는 첫 번째 TURN 명령어에서 my_time10,000ms10{,}000\mathrm{ms}입니다.
  • 메모리 : 1,024MB1{,}024\mathrm{MB}
  • 채점 환경 : HELP > 채점 환경