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

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

빛의 길

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

요약
장애물이 있는 격자에서 남쪽으로 나가는 레이저가 괴물에 닿도록 P 거울과 Q 거울을 각각 A개 이하로 놓을 때, 사용한 거울 수의 최솟값을 구한다.
난이도

어려움10점 중 8점

유형
BFS, 그래프, 시뮬레이션, 구현
정답자
아직 제출이 없습니다

문제

N×MN \times M 격자(2≤N,M≤1002 \leq N, M \leq 100)의 한 칸에 사악한 괴물이 있고, 다른 칸에 있는 레이저 발생기로 괴물을 죽이려고 한다. 레이저 발생기의 위치와 방향은 고정되어 있으므로 레이저를 반사시키려면 거울이 여러 개 필요할 수 있다. 격자에는 장애물이 있고 거울의 개수는 제한되어 있다. 괴물을 죽일 수 있는지 판별하고, 죽일 수 있다면 필요한 거울의 최소 개수를 구하라.

단면 거울에는 두 종류가 있다. P형 거울은 동서 방향에서 45도 또는 225도 각도로 놓을 수 있고, Q형 거울은 135도 또는 315도 각도로 놓을 수 있다. 예를 들어 거울 네 개를 알맞게 놓으면 레이저는 다음과 같이 지나간다.

거울은 단면이므로 위 그림에서 X 표시가 있는 뒷면은 반사하지 않는다. P형 거울 AA개와 Q형 거울 AA개가 있다(0≤A≤100 \leq A \leq 10). 괴물이나 레이저 발생기가 있는 칸에는 거울을 놓을 수 없지만, 레이저는 그 칸을 지나갈 수 있다. 레이저가 괴물이 있는 칸에 도달하면 괴물은 죽는다.

입력

각 테스트 케이스는 여러 줄로 이루어진다.

첫째 줄에는 세 정수 NN, MM, AA가 주어진다. 다음 NN개 줄에는 각각 MM개 문자가 주어지며 격자 정보를 나타낸다. '#', '.', 'S', 'G'는 각각 장애물, 빈 칸, 레이저 발생기의 위치, 사악한 괴물의 위치를 나타낸다. 첫째 줄은 가장 북쪽 칸의 정보를, 마지막 줄은 가장 남쪽 칸의 정보를 나타낸다. 레이저 발생기와 괴물은 각각 정확히 하나씩 있으며, 레이저 발생기는 항상 남쪽으로 레이저를 발사한다.

출력

괴물을 죽일 수 있으면 사용한 거울의 최소 개수를, 아니면 -1을 출력한다.

예제4

  1. 예제 1

    입력
    3 3 2
    S#.
    ...
    .#G
    
    예상 출력
    2
    
  2. 예제 2

    입력
    3 3 1
    S#.
    ...
    .#G
    
    예상 출력
    -1
    
  3. 예제 3

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

    입력
    4 3 2
    S..
    ...
    ..#
    .#G
    
    예상 출력
    -1