코딩테스트 준비/Softeer
나무 섭지 (Python)
석사한 화이트핸드
2024. 10. 30. 19:30
728x90
반응형
https://softeer.ai/practice/7726
from collections import deque
import sys
input = sys.stdin.readline
n, m = map(int, input().split())
graph = [list(map(str, input())) for _ in range(n)]
mover = []
# 남우가 유령보다 먼저 움직여야 하므로 먼저 mover 리스트에 담는다.
for i in range(n):
for j in range(m):
if graph[i][j] == "N":
mover.append((i, j, "N"))
for i in range(n):
for j in range(m):
if graph[i][j] == "G":
mover.append((i, j, "G"))
def bfs():
Q = deque(mover)
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
while Q:
x, y, c = Q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < n and 0 <= ny < m:
# 현재 캐릭터가 남우고 유령에게 잡히지 않았다면 움직임
if c == "N" and graph[x][y] == "N":
if graph[nx][ny] == ".":
graph[nx][ny] = "N"
Q.append((nx, ny, c))
if graph[nx][ny] == "D":
return "Yes"
# 현재 캐릭터가 유령일 때
if c == "G":
if graph[nx][ny] != "D" and graph[nx][ny] != "G":
graph[nx][ny] = "G"
Q.append((nx, ny, c))
return "No"
print(bfs())
728x90
반응형