세균 전쟁
문제 설명
[ALPHANO] 세균전쟁 규칙 설명 (Youtube)
크기의 배양판 위에서 두 종류의 세균(O와 X)이 세력 다툼을 합니다.
배양판은 크기의 칸이 행 열로 배열된 형태입니다. 행 번호는 위에서 아래로 행부터 행, 열 번호는 왼쪽에서 오른쪽으로 열부터 열까지이며, 행 열의 칸을 로 표기합니다.

각 칸은 빈 칸 ., 선공 세균 O, 후공 세균 X 중 하나의 상태를 가집니다. 초기에는 과 에는 선공 세균 O가, 과 에는 후공 세균 X가 놓이며, 나머지 개의 칸은 모두 빈 칸 .입니다.
세력 다툼은 선공 세균 O부터 시작하여 O와 X가 번갈아 턴을 진행합니다. 자신의 턴에는 본인 세균이 놓인 시작 칸 에서 비어있는 도착 칸 을 선택하여 세균을 퍼뜨릴 수 있습니다.
- 이동 거리 는 반드시 또는 여야 합니다.
- 이동 거리가 인 경우는 분열(Division)이라 부릅니다. 분열을 선택하면 시작 칸 의 세균은 그대로 남고 도착 칸 에 동일한 세균이 새로 생깁니다.
- 이동 거리가 인 경우는 도약(Leap)이라 부릅니다. 도약을 선택하면 시작 칸 의 세균은 사라져 빈 칸
.이 되고, 도착 칸 에만 세균이 새로 생깁니다. - 분열 또는 도약 행동이 끝난 직후에는 즉시 감염(Infection)이 진행됩니다. 감염은 도착 칸 을 기준으로 방향(상하좌우, 대각선)으로 인접한 칸에 있는 상대 세균이 현재 차례의 세균으로 바뀌는 것을 의미합니다.
- 자신의 턴에 수행할 수 있는 합법적인 분열이나 도약이 전혀 없다면,
PASS를 선택해야 하며, 이 경우 배양판에는 아무 변화 없이 턴이 넘어갑니다.
정리하면, 각 세균은 자신의 턴에 세균을 퍼트릴 방법이 있다면 분열 또는 도약을 선택합니다. 이후 감염이 진행되고 턴을 마칩니다. 그렇지 않다면 PASS를 선택해 즉시 턴을 마칩니다.
다음은 선공 세균이 에서 로 분열을 수행하는 예시입니다.

다음은 후공 세균이 에서 로 도약을 수행하는 예시입니다.

마지막으로 다음은 선공 세균이 PASS를 선택해야 하는 예시입니다.

세력 다툼은 다음 조건 중 하나가 만족되면 종료됩니다.
- 어느 한쪽의 세균이 배양판에서 완전히 사라졌을 때
- 배양판에 남은 빈 칸이 없을 때
- 두 세균이 모두 번씩 행동을 수행했을 때 (총 턴 진행)
세력 다툼은 종료 시점에 더 많은 칸을 점유한 쪽이 승리하며, 만약 점유한 칸 수가 동일할 경우 무승부로 처리합니다.
배양판의 최종 승자가 될 세균을 위한 AI를 설계해주세요!
입출력 형식
심판 프로그램은 다음의 한 줄 단위의 텍스트 명령으로 에이전트와 통신합니다.
| 명령어 | 심판→에이전트(입력) | 에이전트→심판 (출력) | 시간 제한(ms) | 설명 |
|---|---|---|---|---|
| READY | READY (FIRST | SECOND) |
OK |
3000 |
선공/후공 정보를 알립니다. |
| TURN | TURN my_time opp_time |
MOVE x1 y1 x2 y2 |
my_time |
내 남은 시간과 상대의 남은 시간을 알립니다. 이번 턴에 내가 선택한 수의 , 를 출력합니다. PASS를 선택한 경우는 MOVE -1 -1 -1 -1을 출력합니다. |
| OPP | OPP x1 y1 x2 y2 time |
- | - | 상대가 직전에 둔 수와 사용한 시간을 알립니다. 상대가 PASS를 선택한 경우는 OPP -1 -1 -1 -1 time이 입력됩니다. |
| FINISH | FINISH |
- | - | 게임 종료를 알립니다. 에이전트는 추가 출력 없이 프로그램을 정상 종료해야 합니다. |
x1, y1, x2, y2는 이상 이하의 정수이며, my_time, opp_time, time은 이상 이하의 정수입니다.
모든 출력 후에는 개행문자를 출력한 뒤 버퍼를 flush해야 합니다.
시간 제한이 있는 명령에서 출력을 제한 내에 수행하지 않으면 시간 초과(TLE) 판정을 받습니다.
출력 형식에 맞지 않는 문자열을 출력하거나, TURN 명령어가 주어질 때 합법적이지 않은 수를 출력하면 런타임 에러(RE) 판정을 받습니다.
입출력 예시
| 선공 입력 | 선공 출력 | 후공 입력 | 후공 출력 |
|---|---|---|---|
READY FIRST |
READY SECOND |
||
OK |
OK |
||
TURN 10000 10000 |
|||
MOVE 1 1 2 2 |
|||
OPP 1 1 2 2 50 |
|||
TURN 10000 9950 |
|||
MOVE 7 7 6 6 |
|||
OPP 7 7 6 6 20 |
|||
TURN 9950 9980 |
|||
MOVE -1 -1 -1 -1 |
|||
FINISH |
FINISH |
예제 코드
- C20 : sample.c
- CPP20 : sample.cpp
- PYTHON3, PYPY3 : sample.py
제한
- 메모리 : 1024MB
- 채점 환경 : HELP > 채점 환경
