코딩테스트 준비/[백준]
[백준] 5427번 불 - 파이썬
bled
2021. 6. 20. 15:14
https://www.acmicpc.net/problem/5427
5427번: 불
상근이는 빈 공간과 벽으로 이루어진 건물에 갇혀있다. 건물의 일부에는 불이 났고, 상근이는 출구를 향해 뛰고 있다. 매 초마다, 불은 동서남북 방향으로 인접한 빈 공간으로 퍼져나간다. 벽에
www.acmicpc.net
[code]
from collections import deque
import sys
input = sys.stdin.readline
dx = [1,-1,0,0]
dy = [0,0,1,-1]
def bfs(start_r, start_c):
q.append([start_r, start_c])
global time
while q:
time += 1
qlen = len(q)
for _ in range(qlen):
y, x = q.popleft()
matrix[y][x] = '@'
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if ny < 0 or ny >=h or nx < 0 or nx >= w:
return time
if 0 <= ny < h and 0 <= nx < w:
if matrix[ny][nx] == '.':
matrix[ny][nx] = '@'
q.append([ny, nx])
fire()
return 'IMPOSSIBLE'
def fire():
qlen = len(fire_q)
for i in range(qlen):
y, x = fire_q.popleft()
for j in range(4):
nx = x + dx[j]
ny = y + dy[j]
if 0 <= ny < h and 0 <= nx < w and matrix[ny][nx] == '.':
matrix[ny][nx] = '*'
fire_q.append([ny, nx])
for _ in range(int(input())):
w, h = map(int, input().split())
q = deque()
fire_q = deque()
matrix = []
time = 0
for i in range(h):
matrix.append(list(input().strip()))
for j in range(w):
if matrix[i][j] == '@':
start_r, start_c = i, j
elif matrix[i][j] == '*':
fire_q.append([i, j])
fire()
print(bfs(start_r, start_c))
유사 문제
https://www.acmicpc.net/problem/4179
4179번: 불!
입력의 첫째 줄에는 공백으로 구분된 두 정수 R과 C가 주어진다. 단, 1 ≤ R, C ≤ 1000 이다. R은 미로 행의 개수, C는 열의 개수이다. 다음 입력으로 R줄동안 각각의 미로 행이 주어진다. 각각의 문
www.acmicpc.net