동캄의 코딩도장

백준 4179 [불!] 파이썬 본문

코테/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")

왜 같은문제가 있는것일까..?

반응형