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]))