DevYoon
[๋ฐฑ์ค] 4179. ๋ถ! (Python) ๋ณธ๋ฌธ
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]))