달리기

면접 대비

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

요약
벽이 있는 격자에서 한 번에 상하좌우로 빈 칸을 1칸 이상 K칸 이하 이동할 때, 시작점에서 도착점까지 가는 최소 이동 횟수를 구한다.
난이도

보통10점 중 7점

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

문제

진영이는 다이어트를 위해 N×MN \times M 크기의 체육관을 달리려고 한다. 체육관은 1×11 \times 1 크기의 칸으로 나누어져 있고, 칸은 빈 칸 또는 벽이다. xx행 yy열에 있는 칸은 (x,y)(x, y)로 나타낸다.

매 초마다 진영이는 위, 아래, 오른쪽, 왼쪽 중에서 이동할 방향을 하나 고르고, 그 방향으로 최소 1개, 최대 KK개의 빈 칸을 이동한다.

시작점 (x1,y1)(x_1, y_1)과 도착점 (x2,y2)(x_2, y_2)가 주어졌을 때, 시작점에서 도착점으로 이동하는 최소 시간을 구해보자.

입력

첫째 줄에 체육관의 크기 NN과 MM, 1초에 이동할 수 있는 칸의 최대 개수 KK가 주어진다.

둘째 줄부터 NN개의 줄에는 체육관의 상태가 주어진다. 체육관의 각 칸은 빈 칸 또는 벽이고, 빈 칸은 '.', 벽은 '#'으로 주어진다.

마지막 줄에는 네 정수 x1x_1, y1y_1, x2x_2, y2y_2가 주어진다. 두 칸은 서로 다른 칸이고, 항상 빈 칸이다.

출력

(x1,y1)(x_1, y_1)에서 (x2,y2)(x_2, y_2)로 이동하는 최소 시간을 출력한다. 이동할 수 없는 경우에는 -1을 출력한다.

제한

  • 2≤N,M≤1 0002 \le N, M \le 1\,000
  • 1≤K≤1 0001 \le K \le 1\,000
  • 1≤x1,x2≤N1 \le x_1, x_2 \le N
  • 1≤y1,y2≤M1 \le y_1, y_2 \le M

예제3

  1. 예제 1

    입력
    3 4 4
    ....
    ###.
    ....
    1 1 3 1
    
    예상 출력
    3
    
  2. 예제 2

    입력
    3 4 1
    ....
    ###.
    ....
    1 1 3 1
    
    예상 출력
    8
    
  3. 예제 3

    입력
    2 2 1
    .#
    #.
    1 1 2 2
    
    예상 출력
    -1