๐ก ๋ฌธ์ ์์ฝ
๊ฒฉ์ํ ๋ฏธ๋ก์์ ์งํ(J)์ด ํ์ถ๊ตฌ ์์ด ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋์ผ ํ๋ค. ๋งค ๋ถ ๋ถ(F)์ด ๋ค ๋ฐฉํฅ์ผ๋ก ํผ์ง๋ฏ๋ก, ์งํ์ ๋ถ์ด ๋ฟ๊ธฐ ์ ์์ ํ ๊ฒฝ๋ก๋ฅผ ์ฐพ์์ผ ํ๋ค.
๐ง ๋ฌธ์ ๋ฐฐ๊ฒฝ
- R×C ํฌ๊ธฐ, ๋น์นธ ./๋ฒฝ #/์งํ J/๋ถ F.
- ๋งค ๋ถ ๋ถ๊ณผ ์งํ์ด ๋์์ ํ ์นธ์ฉ ๋ค ๋ฐฉํฅ ์ด๋.
- ์งํ์ด ๋ฏธ๋ก ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋ฉด ํ์ถ.
- ๋ถ ๋๋ ๋ถ์ด ๋๋ฌ ์์ ์ธ ์นธ์๋ ์งํ ์ ์ฅ ๋ถ๊ฐ.
๐ ๊ธฐ์กด(์ง๊ด) ์ ๊ทผ
- ๋งค ์ด๋๋ง๋ค ์งํ BFS ๋ด๋ถ์์ ๋ถ BFS๋ฅผ ํธ์ถ → ์งํ์ ๊ฐ ์์น๋ง๋ค ๋ถ ํ์ฐ์ ์ฌ๊ณ์ฐ.
- ์๊ฐ ๋ณต์ก๋ O((RC)²)๋ก R,C ์ต๋ 1000์ผ ๋ ๋ถ๊ฐ๋ฅ.
# (์์ฌ ์ฝ๋)
def escape_time(maze):
while ์งํ ํ:
jx, jy, t = ์งํ ์ด๋
๋ถ ํ์ฐ = BFS_from_all_F()
if (jx,jy) ์์ (t, ๋ถ ํ์ฐ): enqueue
๐ง ๊ฐ์ ์ ๊ทผ: ๋ ๋จ๊ณ BFS
1๏ธโฃ ๋ถ BFS: ๋ชจ๋ ์ด๊ธฐ ๋ถ ์์น์์ ์์ํด ๊ฐ ์นธ์ ๋ถ์ด ๋๋ฌํ๋ ์ต์ ์๊ฐ์ fire_time ๋ฐฐ์ด์ ๊ธฐ๋ก (O(RC)).
2๏ธโฃ ์งํ BFS: ์งํ์ ์์์ ์์ BFS, fire_time[nx][ny] > jihoon_time+1 ์กฐ๊ฑด ๋ง์กฑ ์๋ง ์ด๋. ๊ฒฝ๊ณ๋ฅผ ๋ฒ์ด๋๋ฉด ์ฆ์ ์ข
๋ฃ.
from collections import deque
INF = float('inf')
# 1) ๋ถ BFS
fire_time = [[INF]*C for _ in range(R)]
q = deque()
for i in range(R):
for j in range(C):
if maze[i][j]=='F':
fire_time[i][j]=0
q.append((i,j,0))
while q:
x,y,t = q.popleft()
for dx,dy in [(1,0),(-1,0),(0,1),(0,-1)]:
nx,ny = x+dx, y+dy
if 0<=nx<R and 0<=ny<C and maze[nx][ny]=='.' and fire_time[nx][ny]>t+1:
fire_time[nx][ny] = t+1
q.append((nx,ny,t+1))
# 2) ์งํ BFS
jihoon_time = [[INF]*C for _ in range(R)]
sx, sy = start_J
jihoon_time[sx][sy]=0
q = deque([(sx,sy,0)])
ans = None
while q:
x,y,t = q.popleft()
# ๊ฒฝ๊ณ ํ์ถ
if x==0 or y==0 or x==R-1 or y==C-1:
ans = t+1
break
for dx,dy in [(1,0),(-1,0),(0,1),(0,-1)]:
nx,ny,nt = x+dx, y+dy, t+1
if 0<=nx<R and 0<=ny<C and maze[nx][ny]=='.' \
and jihoon_time[nx][ny]>nt and fire_time[nx][ny]>nt:
jihoon_time[nx][ny]=nt
q.append((nx,ny,nt))
print(ans if ans else "IMPOSSIBLE")
โ ์ฑ๋ฅ ๋น๊ต ๋ฐ ๊ฒฐ๋ก
๊ตฌ๋ถ ์ง๊ด ์ ๊ทผ ๋ ๋จ๊ณ BFS
| ์๊ฐ ๋ณต์ก๋ | O((RC)²) | O(RC + RC) = O(RC) |
| ์ฐ์ฐ ํ์ | ์ต๋ 10¹² ๊ฐ๋ฅ | ์ฝ 2×10โถ |
- ํต์ฌ: ๋ถ ํ์ฐ์ ํ ๋ฒ๋ง ๊ณ์ฐํ๊ณ , ์งํ ์ด๋์์๋ง ์กฐ๊ฑด ๊ฒ์ฌ → O(R×C) ๋ด ํด๊ฒฐ ๊ฐ๋ฅ
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฐฑ์ค 2075: N๋ฒ์งธ ํฐ ์(JAVA) (0) | 2025.05.06 |
|---|---|
| ๋ฐฑ์ค 13114: List of Unique Numbers(ํ์ด์ฌ) (0) | 2025.04.28 |
| 22251๋ฒ: ๋น๋ฐ ํธ์(ํ์ด์ฌ) (0) | 2025.04.26 |
| ๋ฐฑ์ค 1253: ์ข๋ค(ํ์ด์ฌ) (0) | 2025.04.25 |
| ๋ฐฑ์ค 4485: ๋ น์ ์ท ์ ์ ์ ๊ฐ ์ ค๋ค์ง?(ํ์ด์ฌ) (0) | 2025.04.25 |