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

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

공주를 도와줘!

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

요약
격자에 있는 공주가 동시에 움직이는 여러 병사를 피해 유일한 탈출구에 도달할 수 있는지 판정한다.
난이도

어려움10점 중 8점

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

문제

어느 왕국의 백성들이 공주의 폭정에 맞서 혁명을 일으켰다. 혁명군은 공주가 사는 왕궁에 들이닥쳤고, 병사들은 공주를 붙잡으려고 왕궁 안을 뒤지고 있다. 공주가 왕궁에서 탈출할 수 있는지 판정하는 프로그램을 작성하시오.

왕궁의 바닥은 격자로 나뉜 직사각형이다. 격자의 칸은 두 종류다. 공주와 병사가 들어갈 수 있는 칸을 빈 칸, 아무도 들어갈 수 없는 칸을 벽이라 부른다. 처음에 공주와 병사들은 서로 다른 빈 칸에 있다. 격자에는 탈출구가 정확히 하나 있고, 공주가 탈출구에 도착하면 왕궁을 탈출한다. 병사는 0명 이상이다.

매 단위 시간마다 공주와 모든 병사는 동시에 행동한다. 즉, 서로 상대가 다음에 어떻게 움직일지 모르는 채로 자신의 행동을 정해야 한다. 한 단위 시간에 공주와 병사는 상하좌우로 인접한 빈 칸으로 이동하거나 현재 칸에 머무를 수 있고, 왕궁 바닥 밖으로 나갈 수는 없다. 이동이 끝난 뒤 공주와 병사 한 명 이상이 같은 칸에 있으면 공주는 붙잡힌다. 병사를 모두 없앤다면 공주가 빈 칸만 거쳐 탈출구에 도달할 수 있음이 보장된다.

병사들이 어떻게 움직이더라도 붙잡히지 않는 경로가 공주에게 존재하면 공주는 병사들을 따돌리고 탈출할 수 있다. 공주와 병사가 탈출구에 동시에 도착하면 공주는 붙잡힌다는 점에 주의하라. 공주는 왕궁을 탈출할 수 있는가?

입력

입력은 다음 형식이다.

H W
map1
.
.
.
mapH

첫째 줄에 격자의 높이 HH와 너비 WW가 공백으로 구분되어 주어진다. (2≤H,W≤2002 \le H, W \le 200)

이어지는 HH개 줄 중 ii번째 줄에는 왕궁 바닥의 상태를 나타내는 길이 WW의 문자열 mapii가 주어진다. mapii의 jj번째 문자는 ii번째 행 jj번째 열 칸의 상태다.

'@', '$', '%', '.', '#'은 각각 공주, 병사, 탈출구, 빈 칸, 벽을 뜻한다. 격자에 '@'와 '%'는 정확히 하나씩 있고, '$'는 0개 이상 있음이 보장된다.

출력

공주가 왕궁을 탈출할 수 있으면 "Yes"를, 그렇지 않으면 "No"를 한 줄에 출력한다.

예제5

  1. 예제 1

    입력
    2 4
    %.@$
    ..$$
    
    예상 출력
    Yes
    
  2. 예제 2

    입력
    3 4
    .%..
    .##.
    .@$.
    
    예상 출력
    Yes
    
  3. 예제 3

    입력
    2 3
    %$@
    ###
    
    예상 출력
    No
    
  4. 예제 4

    입력
    2 3
    @#$
    .%.
    
    예상 출력
    No
    
  5. 예제 5

    입력
    2 2
    @%
    ..
    
    예상 출력
    Yes