-
[๋ฐฑ์ค] ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ(๊ณจ๋3)๐ปProgramming/Algorithm 2025. 9. 8. 18:31
๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/2206
BFS ์ด์ฉ ๋ฌธ์
1. q์ ๋ฃ๋ ์ ๋ณด: y, x, <ํ๋ฒ ์ด๋ฏธ ๋ฒฝ์ ๋ถ์ ์ ์ด ์๋์ง ์ฌ๋ถ>, ์ง๊ธ๊น์ง ์จ ๊ฑฐ๋ฆฌ
2. ํ์ฌ ์ธ๋ฑ์ค์์ dy, dx ๋ณ์๋ฅผ ์ด์ฉํ์ฌ ์ํ์ข์ฐ๋ฅผ ์ด๋ํ๋ฉฐ,
๋ค์์ q์ ๋ฃ์ด์ค ์ธ๋ฑ์ค(y, x)๊ฐ ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๋ฒ์๋ฅผ ๋ฒ์ด๋์ง ์๋์ง ํ์ธ
3. ๋ฒฝ์ด ์๋๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ฒฝ์ฐ / ๋ฒฝ์ด๊ณ ์์ง ๋ฒฝ์ ๋ถ์์ ์ด ์๋ ๊ฒฝ์ฐ๋ก
๋๋์ด q์ ์ฝ์
-> ๋ฒฝ์ธ๋ฐ ์ด๋ฏธ ๋ฒฝ์ ํ ๋ฒ ๋ถ์์ ์ด ์๋ ๊ฒฝ์ฐ๋ ์๋์ผ๋ก ์ค๋จ๋จ
4. ๋ต์ return
y, x๊ฐ n-1, m-1์ ๋๋ฌํ์ ๊ฒฝ์ฐ dist ๋ณ์ return
while๋ฌธ์ด ์ข ๋ฃ๋์๋๋ฐ dist๊ฐ return ๋์ง ์์ ๊ฒฝ์ฐ
-> 0, 0์์ n-1, m-1๋ก ๊ฐ๋ ๊ฒฝ๋ก๊ฐ ์กด์ฌํ์ง ์์ผ๋ -1 return
* ์ visited ๋ฐฐ์ด์ด 3์ฐจ์ ๋ฐฐ์ด์ด์ด์ผ ํ๋์ง?
ํ ๋ฒ ๋ฒฝ์ ๋ถ์ ์ ์ด ์๋ ๊ฒฝ์ฐ์ธ์ง, ์๋ ๊ฒฝ์ฐ์ธ์ง ๊ตฌ๋ถํด์ผ ํ๊ธฐ ๋๋ฌธ์
๊ตฌํ ์ฝ๋
from collections import deque import sys input = sys.stdin.readline def bfs(n, m, graph): visited = [[[False]*2 for _ in range(m)] for _ in range(n)] visited[0][0][0] = True q = deque([(0, 0, 0, 1)]) while q: y, x, broken, dist = q.popleft() if (y, x) == (n-1, m-1): return dist for dy, dx in [(1, 0), (-1, 0), (0, 1), (0, -1)]: ny, nx = y + dy, x + dx if 0 <= ny < n and 0 <= nx < m: # ๋ฒฝ์ด ์๋๊ณ ์์ง ๋ฐฉ๋ฌธ ์ํ ๊ฒฝ์ฐ if graph[ny][nx] == 0 and not visited[ny][nx][broken]: visited[ny][nx][broken] = True q.append((ny, nx, broken, dist+1)) # ๋ฒฝ์ด๊ณ ์์ง ๋ฒฝ์ ๋ถ์ ์ ์ด ์๋ ๊ฒฝ์ฐ elif graph[ny][nx] == 1 and broken == 0 and not visited[ny][nx][1]: visited[ny][nx][1] = True q.append((ny, nx, 1, dist+1)) return -1 n, m = map(int, input().split()) graph = [list(map(int, input().strip())) for _ in range(n)] print(bfs(n, m, graph))'๐ปProgramming > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] ์ด๋ถ ๊ทธ๋ํ(๊ณจ๋4) (0) 2025.09.10 [๋ฐฑ์ค] ํ ๋งํ (๊ณจ๋5) (0) 2025.09.09 [๋ฐฑ์ค] ํธ๋ฆฌ์ ์ง๋ฆ(๊ณจ๋4) (0) 2025.09.02 [ํ๋ก๊ทธ๋๋จธ์ค] N์ผ๋ก ํํ(level3) (0) 2025.08.29 [Algorithm] BFS, DFS (with Python) (0) 2024.06.28