코딩테스트 준비/Softeer

GINI야 도와줘(Python)

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

https://softeer.ai/practice/6271

 

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)]
distance = [[0]*m for _ in range(n)]
mover = []
# 태범이가 먼저 움직여야 하므로 먼저 mover 리스트에 담는다.
for i in range(n):
    for j in range(m):
        if graph[i][j] == "W":
            mover.append((i, j, "W"))

for i in range(n):
    for j in range(m):
        if graph[i][j] == "*":
            mover.append((i, j, "*"))

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 == "W" and graph[x][y] == "W":
                    if graph[nx][ny] == ".":
                        graph[nx][ny] = "W"
                        distance[nx][ny] = distance[x][y] + 1
                        Q.append((nx, ny, c))
                    elif graph[nx][ny] == "H":
                        return distance[x][y] + 1
                # 현재 캐릭터가 소나기일 때
                if c == "*":
                    if graph[nx][ny] == "." or graph[nx][ny] == "W":
                        graph[nx][ny] = "*"
                        Q.append((nx, ny, c))
    return "FAIL"

print(bfs())
728x90
반응형