IT/coding study

[acmicpc] 5427. 불(python)

seyeonHello 2023. 3. 31. 23:45
import sys
from collections import deque
input=sys.stdin.readline

dirs=[(1,0),(0,1),(-1,0),(0,-1)]
N=int(input())
def bfs():
    count=0
    while True:
        count+=1
        for j in range(len(fire)):
            r,c=fire.popleft()
            for i in range(4):
                nr,nc=r+dirs[i][0],c+dirs[i][1]
                if 0>nr or nr>=h or nc<0 or nc>=w:
                    continue
                if building[nr][nc]!='#' and building[nr][nc]!='*':
                    building[nr][nc]='*'
                    fire.append([nr,nc])
        for j in range(len(sang)):
            sr, sc = sang.popleft()
            for i in range(4):
                nr,nc=sr+dirs[i][0],sc+dirs[i][1]
                if 0>nr or nr>=h or nc<0 or nc>=w:
                    return count
                if building[nr][nc]=='.':
                    building[nr][nc]='@'
                    sang.append([nr,nc])
        if len(sang)==0: return "IMPOSSIBLE"
for _ in range(N):
    fire=deque()
    sang=deque()
    w, h = map(int, input().split())
    building=[list(input().strip()) for _ in range(h)]
    for r in range(h):
        for c in range(w):
            if building[r][c]=='@':
                sang.append([r,c])
            elif building[r][c]=='*':
                fire.append([r,c])
    print(bfs())

https://www.acmicpc.net/problem/5427

 

5427번: 불

상근이는 빈 공간과 벽으로 이루어진 건물에 갇혀있다. 건물의 일부에는 불이 났고, 상근이는 출구를 향해 뛰고 있다. 매 초마다, 불은 동서남북 방향으로 인접한 빈 공간으로 퍼져나간다. 벽에

www.acmicpc.net