DevYoon

[๋ฐฑ์ค€] 4179. ๋ถˆ! (Python) ๋ณธ๋ฌธ

PS/Baekjoon

[๋ฐฑ์ค€] 4179. ๋ถˆ! (Python)

gimewn 2022. 5. 17. 15:31

link ๐Ÿ”— https://www.acmicpc.net/problem/4179

 

4179๋ฒˆ: ๋ถˆ!

์ž…๋ ฅ์˜ ์ฒซ์งธ ์ค„์—๋Š” ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋œ ๋‘ ์ •์ˆ˜ R๊ณผ C๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹จ, 1 ≤ R, C ≤ 1000 ์ด๋‹ค. R์€ ๋ฏธ๋กœ ํ–‰์˜ ๊ฐœ์ˆ˜, C๋Š” ์—ด์˜ ๊ฐœ์ˆ˜์ด๋‹ค. ๋‹ค์Œ ์ž…๋ ฅ์œผ๋กœ R์ค„๋™์•ˆ ๊ฐ๊ฐ์˜ ๋ฏธ๋กœ ํ–‰์ด ์ฃผ์–ด์ง„๋‹ค.  ๊ฐ๊ฐ์˜ ๋ฌธ

www.acmicpc.net

 

from collections import deque

dir = [(-1, 0), (1, 0), (0, -1), (0, 1)]

def setfire():
    global fires
    temp = []
    for y, x in fires:
        for i, j in dir:
            dy, dx = y+i, x+j
            if 0 <= dy < Y and 0 <= dx < X and miro[dy][dx] == '.':
                miro[dy][dx] = 'F' # ๋ถˆ ์ง€๋ฅด๊ธฐ
                temp.append((dy, dx))
    fires = temp

def BFS(y, x):
    q = deque()
    q.append((y, x, 0)) # y, x, cnt
    check[y][x] = 1
    fcnt = 0
    while q:
        ny, nx, cnt = q.popleft()
        if cnt > fcnt: # ์ง€ํ›ˆ์ด๊ฐ€ ์ด๋™ํ•œ ๋‹ค์Œ ๋ถˆ ํ™•์‚ฐ
            setfire()
            fcnt += 1
        if miro[ny][nx] == 'F':continue # ๋ถˆ ํ™•์‚ฐ์œผ๋กœ ํ˜„์žฌ ์ž๋ฆฌ๊ฐ€ ๋ถˆ์ด ๋‚ฌ์„ ์ˆ˜๋„... -> ๋ถˆ ๋‚˜๋ฉด ํŒจ์Šค
        for i, j in dir:
            dy, dx = ny+i, nx+j
            if 0 <= dy < Y and 0 <= dx < X :
                if check[dy][dx] == 0 and miro[dy][dx] == '.': # ๋ฒ”์œ„ ๋‚ด์ด๊ณ  ์ด๋™ ๊ฐ€๋Šฅํ•˜๋ฉด ์ด๋™
                    check[dy][dx] = 1
                    q.append((dy, dx, cnt+1))
            else: # ๋ฒ”์œ„ ๋ฐ– => ํƒˆ์ถœ ๊ฐ€๋Šฅ
                return cnt+1
    return "IMPOSSIBLE"


Y, X = map(int, input().split())
jihoon = []
fires = []
miro = []
check = [[0]*X for _ in range(Y)]

for y in range(Y):
    temp = list(input())
    for x in range(X):
        if temp[x] == 'J': # ์ง€ํ›ˆ์ด๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด
            jihoon = (y, x) # ์ขŒํ‘œ ์ €์žฅ
            temp[x] = '.'
        elif temp[x] == 'F': # ๋ถˆ๋‚œ ๊ณณ์„ ๋ฐœ๊ฒฌํ•˜๋ฉด
            fires.append((y, x)) # ์ขŒํ‘œ ์ €์žฅ
    miro.append(temp)

print(BFS(jihoon[0], jihoon[1]))