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

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

벽 타기

면접 대비

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

요약
벽이 있는 격자에서 한 칸 이동은 1초가 걸리지만, 벽에 인접한 두 칸 사이를 움직일 때는 0초가 걸린다. S에서 E까지 걸리는 최소 시간을 구한다.
난이도

보통10점 중 5점

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

문제

루시우는 높이가 HH이고 너비가 WW인 맵의 시작점에서 끝점까지 이동하려고 한다.

  • 맵은 HH개의 행과 WW개의 열로 이루어진 격자판 모양이다. 각 칸은 벽 또는 빈칸이다.

  • 루시우는 상, 하, 좌, 우 방향으로 인접한 칸으로 한 칸씩 이동할 수 있다. 벽으로는 이동할 수 없다.

  • 루시우가 한 칸을 이동하는 데에는 1초가 걸린다.

  • 하지만 루시우가 벽을 타고 이동하면 순식간에 (0초의 시간에) 상, 하, 좌, 우 방향으로 인접한 칸으로 이동할 수 있다.

    • 어떤 빈칸의 상하좌우 중 하나가 벽이면 이 칸은 벽에 인접한 칸이라고 한다.
    • 벽에 인접한 칸에서 벽에 인접한 칸으로 이동하면 벽을 타고 이동한다고 말한다.

루시우가 맵의 시작점에서 끝점까지 이동하는 데 걸리는 최소 시간을 구하여라.

입력

첫째 줄에는 HH와 WW가 공백을 사이에 두고 주어진다. 맵은 HH개의 행과 WW개의 열로 이루어진 격자판 모양이다.

둘째 줄부터, HH개의 줄에 걸쳐서 맵의 모습을 나타내는 WW개의 문자가 주어진다.

  • #는 벽을 뜻한다.
  • .는 빈칸을 뜻한다.
  • S는 맵의 시작점을 뜻한다. 시작점은 빈칸이다.
  • E는 맵의 끝점을 뜻한다. 끝점은 빈칸이다.

출력

루시우가 맵의 시작점에서 끝점까지 이동하는 데 걸리는 최소 시간을 출력하라.

제한

  • 1≤H≤5001 \le H \le 500
  • 1≤W≤5001 \le W \le 500
  • 격자판의 모든 칸들은 ., #, S, E 중 하나의 문자로 주어진다.
  • 시작점 S와 끝점 E는 각각 하나씩만 주어진다.
  • 맵의 가장 바깥 (1번째 열, WW번째 열, 1번째 행, HH번째 행) 칸들은 모두 벽이다.
  • 시작점에서 끝점까지 이동할 수 없는 경우는 주어지지 않는다.

예제2

  1. 예제 1

    입력
    5 5
    #####
    #..E#
    #.S.#
    #...#
    #####
    
    예상 출력
    1
    
  2. 예제 2

    입력
    10 10
    ##########
    #........#
    #...#....#
    #........#
    #.E....S.#
    #........#
    #........#
    ##.......#
    #........#
    ##########
    
    예상 출력
    2