코딩테스트 준비/Softeer
GINI야 도와줘(Python)
석사한 화이트핸드
2024. 10. 30. 01:49
728x90
반응형
https://softeer.ai/practice/6271
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
반응형