https://school.programmers.co.kr/learn/courses/30/lessons/1844
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก์ Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
queue visited ์ฒ๋ฆฌํ๋๊ฑธ
๋ฃ์๋ง์ ํ์ง ์๊ณ ๋นผ๋ผ ๋ ํ๋ฉด ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ๋ค ์ฒ์ ์์์ ใ ใ ใ
<์์>
1 1
1 1
์์ ๊ฐ์ ์์์ผ ๋
1. pop์ดํ์ visited ์ฒ๋ฆฌํ๋ฉด
queue = [(0,0)]
queue = [(0,1), (1,0)]
queue = [(1,0), (1,1)]
queue = [(1,1), (1,1)] <<< ๋๋ฒ ๋ค์ด๊ฐ
2. queue ๋ฃ์๋ง์ visited ์ฒ๋ฆฌํ๋ฉด
queue = [(0,0)]
queue = [(0,1), (1,0)]
queue = [(1,0), (1,1)]
queue = [(1,1)]
from collections import deque
def bfs(x, y, maps, n, m, cnt):
queue = deque([(x,y,cnt)]) # ์ฒ์ ์์ (0,0,1)
maps[x][y] = 2 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
# ์/ํ/์ข/์ฐ
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
while queue:
x, y, cnt = queue.popleft()
if x == n-1 and y == m-1: # ์ข
๋ฃ ์กฐ๊ฑด
return cnt
for i in range(4): # ๋ค์ ์์น์ ๊ฐ ์ ์๋ ํ๋ณด๋ค
nx, ny = x + dx[i], y + dy[i]
if 0 <= nx < n and 0 <= ny < m: # ์์น๊ฐ ๋ฒ์ ์์ ์์ด์ผ ํจ
if maps[nx][ny] == 1: # ๋ฐฉ๋ฌธํ ์ ์ด ์๊ณ (2) ๋ฒฝ์ด ์๋์ด์ผ ํจ(0)
queue.append((nx, ny, cnt+1))
maps[nx][ny] = 2 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
# ๊ฐ ์ ์๋ ๊ฒฝ๋ก์ผ ๋ (queue๋ฅผ ๋ค ๋น์ ๋๋ฐ๋ ์ข
๋ฃ ์กฐ๊ฑด ์ฑ๋ฆฝ์ ์ ํจ)
return -1
def solution(maps):
# ์ต๋จ๊ฑฐ๋ฆฌ ๋ฌธ์ -> bfs ์ ๊ทผ
# ๋์ฐฉํ ์ ์์ ๋๋ -1 ๋ฐํ
# ์ถ๋ฐ (0,0) -> ๋์ฐฉ (n-1, n-1)
n, m = len(maps), len(maps[0])
answer = bfs(0, 0, maps, n, m, 1)
return answer'๐ Study > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ํ๋ก๊ทธ๋๋จธ์ค Lv3 | dfs/bfs | ํผ์ฆ ์กฐ๊ฐ ์ฑ์ฐ๊ธฐ (0) | 2026.04.02 |
|---|---|
| ํ๋ก๊ทธ๋๋จธ์ค Lv3 | dfs/bfs | ์์ดํ ์ค๊ธฐ (0) | 2026.04.01 |
| ํ๋ก๊ทธ๋๋จธ์ค Lv1 | ์์ ํ์ | ๋ชจ์๊ณ ์ฌ (0) | 2026.03.31 |
| ํ๋ก๊ทธ๋๋จธ์ค Lv1 | ์์ ํ์ | ์ต์์ง์ฌ๊ฐํ (0) | 2026.03.31 |
| [Silver IV] 2578 ๋น๊ณ (0) | 2026.03.31 |