만드는 중입니다

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

귀엽기만 한 게 아닌 한별 양

면접 대비

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

요약
격자에서 학교 S에서 집 H까지 가는 최단 거리를 구합니다. 바로 직전 칸으로 되돌아갈 수 없고, 최근 세 칸의 피해 합이 K를 넘지 않아야 합니다.
난이도

보통10점 중 6점

유형
BFS, 그래프, 슬라이딩 윈도우
정답자
아직 제출이 없습니다

문제

당신은 엄청난 불행 체질을 갖고 태어났다. 다행히 당신에게는 불행 체질을 받아내 주는 여자친구 한별이가 있다. 한별이는 운동신경이 매우 뛰어나 당신에게 닥치는 불상사들을 막아내주곤 한다. 하지만 한별이에게도 한계가 있어서, 연속해서 너무 많은 불상사가 생기면 당신을 온전히 지켜주지 못하게 된다.

현재 당신과 한별이는 학교에서 집으로 귀가하는 중이다. 마을은 N×MN\times M 형태의 격자이며, 당신과 한별이는 상하좌우로 인접한 칸으로만 이동할 수 있다. 일부 칸에는 벽이 있어 들어갈 수 없다. 또, 당신은 한별이에게 길치처럼 보이고 싶지 않기 때문에, 바로 직전에 방문한 칸으로 되돌아가지 않는다.

오늘은 한별이가 당신의 집으로 놀러 가기로 한 날이라, 집에 최대한 빨리 가려고 한다. 당신은 십수 년간의 경험으로 마을의 각 좌표에서 일어나는 불상사의 개수를 미리 알고 있다. 가장 최근에 지나온 3개 이하 칸의 불상사 개수 합이 KK개를 넘으면, 한별이도 당신을 지켜주지 못해 당신이 부상을 입게 된다. 또, 당신의 불행 체질은 정말 엄청나서, 방문한 칸을 다시 방문할 때마다 같은 개수의 불상사가 다시 일어난다. 당신은 부상을 입지 않고 안전하게 귀가할 수 있을까?

입력

첫 번째 줄에 마을의 세로 크기 NN, 가로 크기 MM, 한별이가 연속해서 막을 수 있는 불상사의 개수 KK가 주어진다. (2≤N,M≤1 0002\leq N,M\leq 1\,000, 0≤K≤270\leq K\leq 27)

다음 NN개의 줄에 마을의 상태가 주어진다. 각 줄은 길이 MM의 문자열이다. S는 학교, H는 집, X는 이동할 수 없는 벽을 의미한다. 그 밖의 칸에는 해당 좌표에서 일어나는 불상사의 개수가 0부터 9까지의 숫자로 주어진다. 학교와 집은 각각 한 개씩만 있으며, 학교와 집에서는 불상사가 일어나지 않는다.

출력

학교에서 집으로 안전하게 이동할 수 있을 때, 가능한 경로 중 최단 거리를 출력한다. 안전하게 귀가할 수 없다면 -1을 출력한다.

예제2

  1. 예제 1

    입력
    6 6 4
    S1113X
    33323X
    11211X
    13311X
    1XXXXX
    11111H
    
    예상 출력
    20
    
  2. 예제 2

    입력
    3 5 4
    12121
    1X1X1
    SX1XH
    
    예상 출력
    -1