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

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

미궁

면접 대비

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

요약
막힌 칸이 있는 h개 층의 3차원 격자에서 꼭대기 층의 시작점부터 바닥 층의 목표점까지 이동 시간의 최솟값을 구한다. 가로 이동과 아래층으로 바닥을 깨고 떨어지는 데 각각 5초가 걸린다.
난이도

보통10점 중 6점

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

문제

눈을 뜬 페르시아의 왕자는 자파의 지하 미궁 맨 위층에 있다는 것을 알게 되었다. 미궁은 위아래로 놓인 hh개의 층으로 이루어져 있다. 각 층은 m×nm \times n개의 칸으로 나뉜 직사각형 모양의 바닥이다. 일부 칸에는 천장을 받치는 기둥이 서 있어서 왕자는 그런 칸으로 갈 수 없다.

왕자는 같은 층의 두 칸이 한 변을 공유하고 두 칸 모두 기둥이 없으면 그 사이를 이동할 수 있다. 이 이동에는 55초가 걸린다.

자파의 미궁은 바닥이 아주 얇아서, 아래층의 같은 위치에 기둥이 없기만 하면 왕자는 발로 세게 밟아 바닥을 부술 수 있다. 바닥이 부서지면 왕자는 수평으로 움직이지 않고 한 층 아래로 떨어진다. 이 동작에도 55초가 걸린다. 물론 왕자가 이미 맨 아래층에 있다면 발밑의 바닥은 부서지지 않는다.

맨 아래층의 한 칸에서는 사악한 자파와의 결혼을 거부한 공주가 왕자를 기다리고 있다. 왕자가 공주를 찾는 데 걸리는 시간이 최소가 되도록 도와주자.

입력

첫째 줄에 미궁의 높이와 가로, 세로 크기를 나타내는 자연수 hh, mm, nn이 주어진다 (2≤h,m,n≤502 \le h, m, n \le 50). 그다음 줄부터 hh개의 블록이 맨 위층에서 맨 아래층 순서로 주어진다.

각 블록은 nn개의 문자로 이루어진 mm개의 줄로 구성된다. <<.>>(점)은 빈 칸, <<o>>(라틴 소문자 <<o>>)는 기둥이 있는 칸, <<1>>은 여행을 시작할 때 왕자가 있는 빈 칸, <<2>>는 공주가 갇혀 있는 빈 칸을 나타낸다.

문자 <<1>>과 <<2>>는 입력 파일에 각각 정확히 한 번씩 나타난다. 문자 <<1>>은 맨 위층을 나타내는 블록에, 문자 <<2>>는 맨 아래층을 나타내는 블록에 있다.

인접한 블록 사이에는 빈 줄이 하나 있다.

출력

왕자가 공주를 찾는 데 필요한 최소 시간을 초 단위로 출력한다. 선이 항상 악을 이기므로 왕자가 공주를 찾을 수 있다는 것이 보장된다.

예제1

  1. 예제 1

    입력
    3 3 3
    1..
    oo.
    ...
    ooo
    ..o
    .oo
    ooo
    o..
    o.2
    
    예상 출력
    60