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

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

포항항

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

요약
장애물이 있는 격자에서 S에서 출발해 최대 20개의 식당 중 5곳을 방문하는 최소 이동 시간을 구한다.
난이도

보통10점 중 7점

유형
BFS, 비트 연산, 동적 계획법, 최단 경로
정답자
아직 제출이 없습니다

문제

에브리타임을 둘러보다가 한 글을 보았다!

이 글을 보고 공포에 사로잡힌 당신은 주변에서 과메기를 파는 식당으로 달려가기로 했다. 하지만 요즘 과메기가 인기가 많아 식당에서는 1인분씩만 팔고 있다. 따라서 총 다섯 식당을 찾아가 과메기를 먹어야 한다. 슬슬 포항항항 하며 웃음이 나오려고 한다. 최대한 빨리 과메기를 먹고 저주를 풀자!

N×MN \times M 크기의 지도가 주어진다. 지도에서 당신의 위치는 'S', 식당의 위치는 'K'로 주어진다. 지도 중간중간에 장애물이 존재하며, 장애물은 'X'로 주어진다. 당신은 지도 상에서 한 칸씩 상하좌우로 움직일 수 있고, 한 칸을 이동하는 데 1분이 걸린다. 장애물이 있는 칸으로는 이동할 수 없다.

5개의 식당을 방문하는 데 필요한 최소한의 시간을 출력하자.

입력

첫째 줄에 N,M (4≤N,M≤1,000)N, M \, (4 \leq N, M \leq 1,000)이 주어진다.

그 이후 NN개의 줄에 걸쳐 각 줄에 길이 MM의 문자열이 주어진다.

'.'은 빈 칸, 'X'는 장애물, 'S'는 현재 위치, 'K'는 식당을 의미한다 (1≤1 \leq 식당의 수 ≤20\leq 20).

출력

'S'에서 출발하여 주어진 식당 중 5개의 식당을 방문하는 데 걸리는 최소한의 시간을 출력하여라. 만약 5개의 식당을 방문할 수 없는 경우 −1-1을 출력한다.

힌트

첫번째 예제의 경우 오른쪽 3칸, 왼쪽 1칸, 아래쪽 3칸, 오른쪽 1칸, 왼쪽 3칸으로 총 11칸 이동하여 5개의 식당을 방문할 수 있다.

두번째 예제의 경우 장애물에 가로막혀 5개의 식당을 방문할 수 없다.

예제2

  1. 예제 1

    입력
    4 4
    SKKK
    X..X
    X..X
    K..K
    
    예상 출력
    11
    
  2. 예제 2

    입력
    4 4
    SKKK
    XXXX
    KKKK
    KKKK
    
    예상 출력
    -1