만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

상자 배달

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

요약
1×1×3 상자가 격자에서 90도씩 구르며 목적지 칸에 닿는 최소 굴림 횟수를 구한다. 상자가 안정적으로 놓이는 자세는 두 가지다.
난이도

보통10점 중 7점

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

문제

택배 기사는 상자 하나를 손님 집까지 옮겨야 한다. 상자를 들 수는 없어서 굴려서 옮기기로 했다.

상자는 1×1×31 \times 1 \times 3 크기이고, 처음에는 1×11 \times 1 면이 바닥에 닿은 채로 서 있다.

지도는 n×mn \times m 격자이고, 칸마다 땅이거나 싱크홀이다. 한 번 굴리면 상자는 바닥에 닿아 있는 변 하나를 축으로 90도 돌아가고, 굴린 자리에서 버텨야 한다.

  • 1×11 \times 1 면이 바닥일 때는 그 칸이 땅이어야 한다.
  • 1×31 \times 3 면이 바닥일 때는 닿는 세 칸 중 양 끝이 모두 땅이거나 가운데가 땅이어야 한다.

둘 다 만족하지 못하면 상자는 구멍으로 떨어지고 더는 옮길 수 없다. 상자가 닿는 칸은 항상 지도 안에 있어야 한다.

시작 위치와 목적지가 주어질 때 상자를 목적지까지 옮기는 최소 굴리기 횟수를 구하여라. 목적지에서 상자가 서 있을 필요는 없다. 상자가 닿는 칸 가운데 하나가 목적지이기만 하면 된다.

입력

첫째 줄에 지도의 세로 크기 nn과 가로 크기 mm이 주어진다 (1≤n≤5001 \le n \le 500, 1≤m≤5001 \le m \le 500).

다음 nn개 줄에는 mm개의 숫자가 공백 없이 주어진다. 0은 싱크홀, 1은 땅, 2는 상자의 시작 위치, 3은 목적지다. 2와 3은 각각 정확히 한 번 나오고, 두 칸 모두 땅이다.

출력

상자를 목적지까지 옮기는 최소 굴리기 횟수를 출력한다. 옮길 수 없으면 -2를 출력한다.

예제7

  1. 예제 1

    입력
    10 10
    0000000000
    0200000000
    0000000000
    0100000000
    0000000000
    0111111130
    0000000000
    0000000000
    0000000000
    0000000000
    
    예상 출력
    5
    
  2. 예제 2

    입력
    1 4
    2113
    
    예상 출력
    1
    
  3. 예제 3

    입력
    1 2
    23
    
    예상 출력
    -2
    
  4. 예제 4

    입력
    5 1
    2
    0
    1
    0
    3
    
    예상 출력
    2
    
  5. 예제 5

    입력
    1 5
    21013
    
    예상 출력
    2
    
  6. 예제 6

    입력
    1 4
    2130
    
    예상 출력
    1
    
  7. 예제 7

    입력
    2 5
    21110
    01113
    
    예상 출력
    3