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

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

블록 퍼즐

시간 제한2초메모리 제한512 MB

요약
N×N 격자에서 1×1×2 블록을 시작 칸들 중 하나에서 목표 칸까지 굴려 가는데, 구멍에 빠지지 않아야 한다. 목표에 도달할 수 없게 만들기 위해 새로 파야 하는 구멍 칸의 최소 수를 구한다.
난이도

어려움10점 중 8점

유형
BFS, 그래프, 최단 경로, 구현
정답자
아직 제출이 없습니다

문제

블록 퍼즐은 단위 정사각형으로 나뉜 정사각형 격자에서 하는 게임이다. 칸 가운데 일부는 시작칸으로 표시되어 있고, 한 칸은 도착칸으로 표시되어 있다.

게임은 시작칸 하나에 1×1×21 \times 1 \times 2 블록을 세워 놓으면서 시작한다. 이때 블록의 1×11 \times 1 면이 그 칸에 닿아야 한다. 게임의 목표는 블록을 적절히 굴려서 도착칸에 세우는 것이다. 즉 1×11 \times 1 면이 도착칸에 닿아 있게 만들면 된다.

블록은 굴려서 움직인다. 1×11 \times 1 면이 격자에 닿아 있으면 네 방향 모두로 굴릴 수 있다. 하지만 2×12 \times 1 면이 격자에 닿아 있으면 1×11 \times 1 면이 격자에 닿도록만 굴릴 수 있다. 즉 언제나 길이가 1인 변을 축으로 삼아 굴려야 한다.

아래 그림은 굴릴 수 있는 방법을 모두 나타낸 것이고, 굴리기 직전 상태를 반투명으로 그렸다.

블록을 굴리는 방법

이 게임이 어려운 이유는 일부 칸에 구멍이 뚫려 있기 때문이다. 블록의 바닥면이 모두 구멍 위에 있으면 블록은 구멍으로 떨어지고 게임에서 진다. 바닥면이 2×12 \times 1 이고 두 칸 가운데 한 칸에만 구멍이 있다면 블록은 떨어지지 않는다. 블록은 게임판의 경계에 걸칠 수도 있다. 즉 바닥면이 2×12 \times 1 일 때 한 칸은 게임판 안에, 다른 한 칸은 게임판 밖에 있어도 된다.

홍준이는 이 게임을 너무 많이 해서 지루해졌다. 그래서 게임을 풀 수 없게 만들려고 구멍을 더 뚫어 보려고 한다. 홍준이는 시작칸과 도착칸이 아닌 칸을 구멍으로 만들 수 있다.

게임판의 상태가 주어졌을 때, 게임을 풀 수 없게 만들려면 구멍으로 바꿔야 하는 칸이 최소 몇 개인지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 게임판의 크기 NN이 주어진다 (3≤N≤503 \le N \le 50). 둘째 줄부터 NN개의 줄에 게임판의 상태가 한 줄에 NN개의 문자로 주어진다.

'.'은 빈 칸, 'H'는 구멍, 'b'는 시작칸, '$'는 도착칸을 뜻한다.

게임판에 있는 '$'는 정확히 한 개이고, 'b'는 한 개 이상이다.

출력

첫째 줄에 게임을 풀 수 없게 만들려고 구멍으로 바꿔야 하는 칸의 최소 개수를 출력한다. 게임을 풀 수 없게 만들 수 없다면 -1을 출력한다.

예제5

  1. 예제 1

    입력
    4
    b..$
    ....
    HHHH
    HHHH
    
    예상 출력
    2
    
  2. 예제 2

    입력
    15
    ............H..
    ...............
    ...............
    HHH$HHH.....H..
    HHHHHHH........
    HHHHHHHH.......
    ......b..H.....
    ...............
    ...............
    ...H..H..H.....
    ...............
    ...............
    ...............
    ...............
    ...............
    
    예상 출력
    0
    
  3. 예제 3

    입력
    15
    ............H..
    ...............
    ...............
    HHH$HHH........
    HHHHHHH........
    HHHHHHHH.......
    ......b..H.....
    ...............
    ...............
    ...H..H..H.....
    ...............
    ...............
    ...............
    ...............
    ...............
    
    예상 출력
    1
    
  4. 예제 4

    입력
    7
    b..$...
    ...H...
    .......
    b..b..b
    ...H...
    .......
    b..b..b
    
    예상 출력
    4
    
  5. 예제 5

    입력
    7
    b..b..b
    ..b..b.
    .......
    b..$bbb
    .b.....
    ....b..
    b..b..b
    
    예상 출력
    -1