VCF

시간 제한1초메모리 제한1024 MB

요약
15x15 오목판과 플레이어 색이 주어졌을 때, 그 플레이어가 사목을 연속으로 만들어 3수 이내에 승리할 수 있는지 판정하고 수순을 출력합니다.
난이도

어려움10점 중 8점

유형
구현, 시뮬레이션, 백트래킹, 완전 탐색
정답자
아직 제출이 없습니다

문제

오목은 흑돌과 백돌이 번갈아 오목판에 돌을 두어 한 줄에 같은 색깔의 돌을 가로, 세로, 또는 대각선으로 정확히 5개 연결한 형태인 오목을 먼저 완성한 사람이 승리하는 게임이다. 오목에는 VCF (Victory by Continuous Fours)라는 공격 형태가 있는데, 이는 사목을 연속으로 만든 뒤, 최종적으로 오목을 두어서 승리하는 것을 의미한다. 여기서 사목이란 다섯 칸의 범위 내에 같은 색의 돌이 4개 있고, 돌 하나를 더 붙여서 오목을 완성할 수 있는 자리가 한 군데 또는 두 군데 존재하는 모양을 의미한다.

아티초크는 기보 데이터가 주어졌을 때, 주어진 색의 플레이어에게 VCF가 존재하여 3수 이내에 오목을 완성할 수 있는지 여부를 판별하는 프로그램을 짜려고 했지만, 구현 능력이 부족하여 당신에게 도움을 요청했다. 아티초크를 위해 프로그램을 대신 작성해 보자.

입력

처음 1515줄에는 1515개의 알파벳으로 기보 데이터, 즉 오목판의 상태가 주어진다. 검은 오목알이 놓인 자리는 B, 흰 오목알이 놓인 자리는 W, 오목알이 놓이지 않은 자리는 X로 표시되며, 각 알파벳은 붙어서 입력으로 주어진다. 이때, 주어진 오목판에는 오목이 존재하지 않음이 보장되며, 오목판의 초기 상태에 W와 B의 개수의 합은 200을 넘지 않는다.

1616번째 줄에는 B 또는 W가 주어진다. B가 주어진 경우 플레이어는 흑돌이고, W가 주어진 경우 플레이어는 백돌이다.

출력

주어진 오목판에서 플레이어의 차례일 때, 플레이어에게 VCF가 존재하지 않거나, 3수 이내에 오목을 완성할 수 없는 경우 -1을 출력하고 프로그램을 종료한다.

플레이어에게 VCF가 존재하여 3수 이내에 오목을 완성할 수 있는 경우, 다음 쿼리를 최대 3번까지 사용할 수 있다.

  • x_px\_p y_py\_p: x_px\_p행 y_py\_p열 (1≤x_p,y_p≤15)(1 \leq x\_p, y\_p \leq 15)에 플레이어가 돌을 놓는다.
    • 단, 지정한 위치에 이미 돌이 놓여 있거나, 돌을 두었을 때 사목 또는 오목이 완성되지 않으면 를 받는다.

채점 시스템에 쿼리를 출력했을 때, 플레이어가 오목을 완성했다면, 를 받는다.

오목을 완성하지 못한 상태라면, 채점 시스템이 다음과 같은 방식으로 상대방의 다음 수를 반환한다.

  • x_ox\_o y_oy\_o: x_ox\_o행 y_oy\_o열 (1≤x_o,y_o≤15)(1 \leq x\_o, y\_o \leq 15)에 상대방이 돌을 놓는다.

    • 상대방에게 오목을 완성할 수 있는 자리가 있는 경우 해당 자리를 우선적으로 두며, 이 경우 를 받는다.
    • 그렇지 않은 경우, 상대방은 플레이어가 다음 차례에 오목을 완성할 수 있는 자리에 돌을 둔다.
    • 플레이어가 다음 차례에 오목을 완성할 수 있는 자리가 여러 곳인 경우, 채점 시스템은 그 중 한 자리를 랜덤으로 골라서 둔다.

힌트

금수는 고려하지 않는다.

예제4

  1. 예제 1

    입력
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXBXXWXXXXX
    XXXXXBXWBXXXXXX
    XXXXWXWBWXXXXXX
    XXXXWBBBXWXXXXX
    XXXXXXBWXXXXXXX
    XXXXXXXBXXXXXXX
    XXXXXXXXWXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    B
    
    11 5
    
    6 6
    
    
    예상 출력
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    10 6
    
    8 6
    
    11 6
    
  2. 예제 2

    입력
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXWXBXXXX
    XXXXXXXWWBBWXXX
    XXXXXXWBXWBWXXX
    XXXXXXXBWBBBBWX
    XXXXXXXXBXWXXXX
    XXXXXXXWXBXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    W
    
    
    예상 출력
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    -1
    
  3. 예제 3

    입력
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXWXXXXX
    XXXXXXWBBBXXXXX
    XXXXXXXBWXBXXXX
    XXXXXXXXWBXXXXX
    XXXXXXXBWWXXXXX
    XXXXXXXWWXXXXXX
    XXXXXXXXBXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    B
    
    
    예상 출력
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    -1
    
  4. 예제 4

    입력
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXWBBBBXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    XXXXXXXXXXXXXXX
    B
     
    
    예상 출력
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    8 10