๋ฌธ์
ํ๋ก๊ทธ๋๋จธ์ค - ๊ฒ์ ๋งต ์ต๋จ๊ฑฐ๋ฆฌ
ํ์ด ๊ณผ์
BFS
๋ฅผ ํตํด ๋ชฉํ์ง์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ํ์ํ๋ ๋ฌธ์ ์ด๋ค.
๋ฐฉ๋ฌธ์ฌ๋ถ์ ๊ฑฐ๋ฆฌ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด์ ๋์
๋๋ฆฌ ์๋ฃํ์ ์ฌ์ฉํ ์๋ ์์ง๋ง ๊ฒ์๋งต๊ณผ ๋์ผํ ์ด์ฐจ์ ๋ฐฐ์ด์ ์ ์ธํด์
-1์ผ ๊ฒฝ์ฐ๋ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์ง์ , ๊ทธ ์ธ์ ๊ฒฝ์ฐ๋ ์ด๋ฏธ ๋ฐฉ๋ฌธํด์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ๊ตฌํ ์ง์ ์ผ๋ก ํ๋จํ๋๋ก ํ๋ค.
์ด๋ ๊ฒ ํ๋ฉด ํธ๋ฆฌ ํ์์๊ฐ์ ์ ์ฝํ ์ ์์ด์ ๋ ๋น ๋ฅธ ์ํ์๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ค.
์ฝ๋
from collections import deque
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
def bfs(maps, start):
N, M = len(maps), len(maps[0])
q = deque()
dist = [[-1 for _ in range(M)] for _ in range(N)]
goal = (N-1, M-1)
q.append(start)
dist[start[0]][start[1]] = 1
while q:
here = q.popleft()
if here[0] == goal[0] and here[1] == goal[1]:
return dist[here[0]][here[1]]
for i in range(4):
next_x, next_y = here[0] + dx[i], here[1] + dy[i]
if 0 <= next_x < N and 0 <= next_y < M:
if maps[next_x][next_y] != 0 and dist[next_x][next_y] == -1:
dist[next_x][next_y] = dist[here[0]][here[1]] + 1
q.append((next_x, next_y))
return -1
def solution(maps):
answer = bfs(maps, (0, 0))
return answer
maps = [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]]
print(solution(maps))
๋ฐ์ํ
'๐ algorithm > programmers' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
ํ๋ก๊ทธ๋๋จธ์ค Level 2 - ํฐ ์ ๋ง๋ค๊ธฐ (0) | 2021.03.01 |
---|---|
ํ๋ก๊ทธ๋๋จธ์ค Level 3 - ์ฌ ์ฐ๊ฒฐํ๊ธฐ (0) | 2021.03.01 |
ํ๋ก๊ทธ๋๋จธ์ค Level 3 - ์ ๊ตญ ์ฌ์ฌ (0) | 2021.03.01 |
ํ๋ก๊ทธ๋๋จธ์ค Level 3 - ์ถ์ ํธ๋ํฝ (0) | 2021.03.01 |
ํ๋ก๊ทธ๋๋จธ์ค Level 3 - ๋ธ๋ก ์ด๋ํ๊ธฐ (0) | 2021.03.01 |
๐ฌ ๋๊ธ