격자에 있는 공주가 동시에 움직이는 여러 병사를 피해 유일한 탈출구에 도달할 수 있는지 판정한다.
어려움8그래프BFS게임 이론시뮬레이션아직 제출이 없습니다시간 제한2초메모리 제한512 MB어느 왕국의 백성들이 공주의 폭정에 맞서 혁명을 일으켰다. 혁명군은 공주가 사는 왕궁에 들이닥쳤고, 병사들은 공주를 붙잡으려고 왕궁 안을 뒤지고 있다. 공주가 왕궁에서 탈출할 수 있는지 판정하는 프로그램을 작성하시오.
왕궁의 바닥은 격자로 나뉜 직사각형이다. 격자의 칸은 두 종류다. 공주와 병사가 들어갈 수 있는 칸을 빈 칸, 아무도 들어갈 수 없는 칸을 벽이라 부른다. 처음에 공주와 병사들은 서로 다른 빈 칸에 있다. 격자에는 탈출구가 정확히 하나 있고, 공주가 탈출구에 도착하면 왕궁을 탈출한다. 병사는 0명 이상이다.
매 단위 시간마다 공주와 모든 병사는 동시에 행동한다. 즉, 서로 상대가 다음에 어떻게 움직일지 모르는 채로 자신의 행동을 정해야 한다. 한 단위 시간에 공주와 병사는 상하좌우로 인접한 빈 칸으로 이동하거나 현재 칸에 머무를 수 있고, 왕궁 바닥 밖으로 나갈 수는 없다. 이동이 끝난 뒤 공주와 병사 한 명 이상이 같은 칸에 있으면 공주는 붙잡힌다. 병사를 모두 없앤다면 공주가 빈 칸만 거쳐 탈출구에 도달할 수 있음이 보장된다.
병사들이 어떻게 움직이더라도 붙잡히지 않는 경로가 공주에게 존재하면 공주는 병사들을 따돌리고 탈출할 수 있다. 공주와 병사가 탈출구에 동시에 도착하면 공주는 붙잡힌다는 점에 주의하라. 공주는 왕궁을 탈출할 수 있는가?
입력은 다음 형식이다.
H W
map1
.
.
.
mapH
첫째 줄에 격자의 높이 H와 너비 W가 공백으로 구분되어 주어진다. (2≤H,W≤200)
이어지는 H개 줄 중 i번째 줄에는 왕궁 바닥의 상태를 나타내는 길이 W의 문자열 mapi가 주어진다. mapi의 j번째 문자는 i번째 행 j번째 열 칸의 상태다.
'@', '$', '%', '.', '#'은 각각 공주, 병사, 탈출구, 빈 칸, 벽을 뜻한다. 격자에 '@'와 '%'는 정확히 하나씩 있고, '$'는 0개 이상 있음이 보장된다.
공주가 왕궁을 탈출할 수 있으면 "Yes"를, 그렇지 않으면 "No"를 한 줄에 출력한다.