코딩테스트 준비/Softeer

나무 섭지 (Python)

석사한 화이트핸드 2024. 10. 30. 19:30
728x90
반응형

https://softeer.ai/practice/7726

 

Softeer - 현대자동차그룹 SW인재확보플랫폼

 

softeer.ai

 

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
반응형