코테/BOJ
백준 4179 [불!] 파이썬
동 캄
2025. 2. 25. 22:28
반응형
https://www.acmicpc.net/problem/4179
이전에 풀었던 문제와 같다.
https://dongkam.tistory.com/432
백준 5427 [불] 파이썬
https://www.acmicpc.net/problem/5427 아이디어는 바로 생각났으나, 시간 초과로 애를 먹었다.#백준 5427 불import sysfrom collections import dequedr=[0,0,1,-1] #행 이동dc=[1,-1,0,0] #열 이동T=int(sys.stdin.readline()) #테스트
dongkam.tistory.com
#백준 4179 불!
import sys
from collections import deque
dr=[0,0,1,-1] #행 이동
dc=[1,-1,0,0] #열 이동
q=deque([]) #덱 이용(시간단축)
is_success=False #성공 여부 확인
row,col=map(int,sys.stdin.readline().rstrip().split())
field=[[0] *col for _ in range(row)] #필드생성
for i in range(row):
line=list(map(str,sys.stdin.readline()))
for j in range(col):
if line[j]=='#': #벽이면
field[i][j]=1000000 #벽=1000000으로 설정
elif line[j]=='.': #빈공간이면
field[i][j]=-1
elif line[j]=='F': #불이면
q.append([i,j,'F']) # 번지는것을 구분하기 위해 뒤에 불이면 'F' 붙임
field[i][j]=1000000 #불==벽==1000000
elif line[j]=='J': #사람이면
start_r=i
start_c=j
field[i][j]=0
q.append([start_r,start_c,'S']) #번지는것을 구분하기 위해 사람이면 뒤에 'S' 붙임
while q:
r,c,k=q.popleft()
for i in range(4):
R=r+dr[i]
C=c+dc[i]
if k=='S': #사람이면
if 0<=R<row and 0<=C<col: #사람 이동 처리
if field[R][C]==-1:
q.append([R,C,'S'])
field[R][C]=field[r][c]+1
else: #성공하면
is_success=True
print(field[r][c]+1)
break #탈출
else: #불이면
if 0<=R<row and 0<=C<col and field[R][C]==-1: #불 번짐 처리
q.append([R,C,'F'])
field[R][C]=1000000
if is_success==True:
break
if not is_success: #탈출못하는 경우
print("IMPOSSIBLE")
왜 같은문제가 있는것일까..?
반응형