아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

샷큐브

시간 제한10초메모리 제한256 MB

요약
가장자리에서 쏘아 큐브 무리를 막힐 때까지 밀어서 9개를 3x3 정사각형 안에 모으는 최소 사격 횟수를 구합니다.
난이도

어려움10점 중 8점

유형
BFS, 그래프, 시뮬레이션
정답자
아직 제출이 없습니다

문제

비디오 게임 Tales of Graces에는 샷큐브라는 퍼즐 미니게임이 있다. 7×77 \times 7 격자 위에 큐브 9개가 놓여 있고, 이 큐브를 모두 3×33 \times 3 정사각형 모양으로 모으는 것이 목표다. 원래 게임에서는 이 정사각형이 격자 정중앙에 있어야 하지만, 이 문제에서는 격자 안 어디에 있어도 된다.

큐브를 움직이는 방법은 격자 바깥에서 쏘는 것뿐이다. 행 하나 또는 열 하나를 골라 그 바깥에서 안쪽으로 쏜다. 그 줄에서 격자 가장자리에 붙은 칸에 큐브가 있어야 쏠 수 있고, 그 칸에서 시작해 진행 방향으로 빈틈 없이 이어진 큐브 덩어리가 통째로 함께 밀린다. 덩어리는 맨 앞 큐브가 다른 큐브에 막힐 때까지 직진하다가 그 큐브 바로 앞 칸에서 전부 멈춘다. 진행 방향에 덩어리를 멈춰 세울 큐브가 없으면 그쪽으로는 쏠 수 없다. 한 번 쏘면 덩어리는 항상 한 칸 이상 움직인다.

큐브 9개를 3×33 \times 3 정사각형으로 모으는 데 필요한 최소 발사 횟수를 구하는 프로그램을 작성하시오.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤100001 \le T \le 10000)

각 테스트 케이스는 7개의 줄로 이루어지고, 각 줄은 7개의 문자로 이루어진다. 각 문자는 . 또는 X이며, .은 빈 칸, X는 큐브가 놓인 칸을 뜻한다. 모든 테스트 케이스에 큐브는 정확히 9개 있다. 테스트 케이스 사이에는 빈 줄이 하나씩 들어간다.

출력

각 테스트 케이스마다 큐브 9개를 3×33 \times 3 정사각형으로 모으는 데 필요한 최소 발사 횟수를 한 줄에 하나씩 출력한다. 모을 수 없으면 대신 -1을 출력한다.

예제2

  1. 예제 1

    입력
    2
    ...X...
    ...X...
    ..X.X..
    ..XXX..
    ..X.X..
    .......
    .......
    
    .......
    ....XXX
    ....XXX
    ......X
    .......
    .......
    X....X.
    
    예상 출력
    -1
    3
    
  2. 예제 2

    입력
    1
    XXX....
    XXX....
    XXX....
    .......
    .......
    .......
    .......
    
    예상 출력
    0