๋ฐฐ๋„ˆ ์ด๋ฏธ์ง€

๋ฐฑ์ค€ 4179: ๋ถˆ!(ํŒŒ์ด์ฌ)

2025. 4. 26. 23:47ยท์•Œ๊ณ ๋ฆฌ์ฆ˜

๐Ÿ’ก ๋ฌธ์ œ ์š”์•ฝ
๊ฒฉ์žํŒ ๋ฏธ๋กœ์—์„œ ์ง€ํ›ˆ(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
'์•Œ๊ณ ๋ฆฌ์ฆ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • ๋ฐฑ์ค€ 13114: List of Unique Numbers(ํŒŒ์ด์ฌ)
  • 22251๋ฒˆ: ๋นŒ๋Ÿฐ ํ˜ธ์„(ํŒŒ์ด์ฌ)
  • ๋ฐฑ์ค€ 1253: ์ข‹๋‹ค(ํŒŒ์ด์ฌ)
  • ๋ฐฑ์ค€ 4485: ๋…น์ƒ‰ ์˜ท ์ž…์€ ์• ๊ฐ€ ์ ค๋‹ค์ง€?(ํŒŒ์ด์ฌ)
quokkaST
quokkaST
  • quokkaST
    stquokka
    quokkaST
    • ๊ฐœ๋ฐœ์ž (77)
      • n8n (2)
      • CS๊ณต๋ถ€ (46)
        • Java & Spring (15)
        • ์ธํ”„๋ผ (7)
        • ์šด์˜์ฒด์ œ & ์‹œ์Šคํ…œ (9)
        • ๊ธฐํƒ€ CS์ง€์‹ (7)
        • ๋„คํŠธ์›Œํฌ (6)
        • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค (2)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (16)
      • ํ”„๋กœ์ ํŠธ (8)
        • ๊ฐ์ •&๊ธˆ์œต์ฑ—๋ด‡ (8)
      • ๋ฆฌํŒฉํ† ๋ง (5)
        • horong (5)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”