-
[๋ฐฑ์ค] ํ ๋งํ (๊ณจ๋5)๐ปProgramming/Algorithm 2025. 9. 9. 21:17
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/7569
bfs(๊ทธ์ค์์๋ ๋ฉํฐ์์ค bfs) ์ด์ฉ ๋ฌธ์
1. ์์์ด ๋งจ ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค์์๊ฐ ์๋
-> 3์ค for๋ฌธ์ ๋๋ฉฐ ์ต์ ํ ๋งํ ๋ฅผ ๋ชจ๋ ํ์ ์ฝ์
2. ํ๋ฅผ ๋๋ฉฐ ์ต์ ํ ๋งํ ์ ์๋ ์ ์ผ์ชฝ ์ค๋ฅธ์ชฝ ์ ๋ค๋ฅผ ํ์ฌ ์ต์ ํ ๋งํ ๊ฐ + 1 ์ ํด์ ๋ฃ์ด์ค -> ์ต์ ์ผ์๋ฅผ ๊ตฌํ๋ ํต์ฌ ํฌ์ธํธ
์ด ๊ฐ์ด ์ต์ ์ผ์๋ฅผ ์๋ฏธ
3. ํ ์์๋ค์ด ๋ชจ๋ ์์ง๋๋ฉด 3์ค for๋ฌธ์ ํตํด ๊ทธ๋ํ๋ฅผ ๋๋ฉฐ ๋ชจ๋ ํ ๋งํ ๊ฐ ์ต์๋์ง ๋ต์ด ๋ฌด์์ธ์ง ํ์ธํจ
- ์ฌ๊ธฐ์ max๋ฅผ ํตํด ์ผ์๋ฅผ ์ฐพ๋๋ฐ ์ ์ต์ ์ผ์๋ฅผ ์ฐพ์ผ๋ฉด์ ์ต๋ ์ผ์๋ฅผ ๊ตฌํ๋ ๋ผ๋ ์๋ฌธ์ด ์๊ธธ ์ ์์
<- ๋ชจ๋ ํ ๋งํ ๊ฐ ์ต๋ ์๊ฐ์ ๊ตฌํ๋ ค๋ฉด, ๊ฐ์ฅ ๋ฆ๊ฒ ์ต์ ํ ๋งํ ๊ฐ ์ต์ ๋ ์ง๋ฅผ ์์์ผํจ
๊ตฌํ ์ฝ๋
from collections import deque import sys input = sys.stdin.readline def bfs(m, n, h, graph): q = deque() # ์ต์ ํ ๋งํ ๋ชจ๋ ํ์ ์ฝ์ for z in range(h): for y in range(n): for x in range(m): if graph[z][y][x] == 1: q.append((x, y, z)) dx_dy_dz = [(0, 0, 1), (0, 0, -1), (-1, 0, 0), (1, 0, 0), (0, -1, 0), (0, 1, 0)] while q: x, y, z = q.popleft() for dx, dy, dz in dx_dy_dz: nx, ny, nz = x + dx, y + dy, z + dz if 0 <= nx < m and 0 <= ny < n and 0 <= nz < h: if graph[nz][ny][nx] == 0: graph[nz][ny][nx] = graph[z][y][x] + 1 q.append((nx, ny, nz)) # ๋ชจ๋ ํ์์ด ๋๋ ํ ๋ ์ง ๊ณ์ฐ days = 0 for z in range(h): for y in range(n): for x in range(m): if graph[z][y][x] == 0: return -1 days = max(days, graph[z][y][x]) return days - 1 m, n, h = map(int, input().split()) box = [[list(map(int, input().split())) for _ in range(n)] for _ in range(h)] print(bfs(m, n, h, box))'๐ปProgramming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ์ต๋จ๊ฒฝ๋ก(๊ณจ๋4) (0) 2025.10.01 [๋ฐฑ์ค] ์ด๋ถ ๊ทธ๋ํ(๊ณจ๋4) (0) 2025.09.10 [๋ฐฑ์ค] ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ(๊ณจ๋3) (0) 2025.09.08 [๋ฐฑ์ค] ํธ๋ฆฌ์ ์ง๋ฆ(๊ณจ๋4) (0) 2025.09.02 [ํ๋ก๊ทธ๋๋จธ์ค] N์ผ๋ก ํํ(level3) (0) 2025.08.29