chldkato

백준 4179 불! (파이썬) 본문

백준

백준 4179 불! (파이썬)

chldkato 2020. 2. 21. 14:59

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

 

4179번: 불!

문제 지훈이는 미로에서 일을 한다. 지훈이를 미로에서 탈출하도록 도와주자! 미로에서의 지훈이의 위치와 불이 붙은 위치를 감안해서 지훈이가 불에 타기전에 탈출할 수 있는지의 여부, 그리고 얼마나 빨리 탈출할 수 있는지를 결정해야한다. 지훈이와 불은 매 분마다 한칸씩 수평또는 수직으로(비스듬하게 이동하지 않는다)  이동한다.  불은 각 지점에서 네 방향으로 확산된다.  지훈이는 미로의 가장자리에 접한 공간에서 탈출할 수 있다.  지훈이와 불은 벽이 있는 공간

www.acmicpc.net

1. 불과 지훈이가 있을 좌표를 저장할 큐를 따로 만든다

2. 불이 이동하고 지훈이가 이동하는 순서로 bfs를 설계

3. 지훈이에 해당하는 큐에 값이 있으면 bfs를 반복하고 없으면 IMPOSSIBLE 출력

from collections import deque
import sys

input = sys.stdin.readline
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]

def bfs():
    fqlen = len(fq)
    while fqlen:
        x, y = fq.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < r and 0 <= ny < c:
                if a[nx][ny] == '.':
                    a[nx][ny] = 'F'
                    fq.append([nx, ny])
        fqlen -= 1

    qlen = len(q)
    while qlen:
        x, y = q.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if nx < 0 or ny < 0 or nx >= r or ny >= c:
                print(check[x][y])
                return
            else:
                if a[nx][ny] == '.' and not check[nx][ny]:
                    check[nx][ny] = check[x][y] + 1
                    q.append([nx, ny])
        qlen -= 1
        
    if q:
        bfs()
    else:
        print("IMPOSSIBLE")

r, c = map(int, input().split())
check = [[0]*c for _ in range(r)]
a, q, fq = [], deque(), deque()

for i in range(r):
    row = list(input().strip())
    a.append(row)
    for j, key in enumerate(row):
        if key == 'J':
            q.append([i, j])
            check[i][j] = 1
            a[i][j] = '.'
        elif key == 'F':
            check[i][j] = 1
            fq.append([i, j])

bfs()

'백준' 카테고리의 다른 글

백준 3197 백조의 호수 (파이썬)  (0) 2020.02.21
백준 5214 환승 (파이썬)  (0) 2020.02.21
백준 9328 열쇠 (파이썬)  (0) 2020.02.21
백준 16236 아기 상어 (파이썬)  (0) 2020.02.21
백준 1938 통나무 옮기기 (파이썬)  (0) 2020.02.20
Comments