๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/1844
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
ํ์ด
์ต๋จ๊ฑฐ๋ฆฌ ์ ํ์ ๋ฌธ์ ์์ ํ์ธํ๊ณ BFS๋ฅผ ์ด์ฉํ๋ฉด ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค๊ณ ์๊ฐํด์ BFS ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ์๋ค.
์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ค๋ฉด ๋ฐฉ๋ฌธํ๋ ๊ณณ์ ๋ค์ ํ์ธํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ visited๋ฅผ ์ ์ธํด์ฃผ๊ณ , visited๊ฐ False์ผ ๋์๋ง queue์ ๋ฃ์ด์คฌ๋ค.
maps๋ ์ด์ ๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ์ 1์ ๋ํด์ฃผ๋ฉด์ ๊ฐฑ์ ํ๊ณ ์ต์ข
์ ์ผ๋ก n*m ํฌ๊ธฐ์ ๋งต์์ maps[n-1][m-1]๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ maps[n-1][m-1]๊ฐ ๋๋ค.
from collections import deque
def solution(maps):
n = len(maps); m = len(maps[0])
visited = [[False]*m for _ in range(n)]
q = deque()
q.append((0, 0))
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
visited[0][0]=True
while q:
y, x = q.popleft()
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
if 0<=nx<m and 0<=ny<n and maps[ny][nx] == 1:
if not visited[ny][nx]:
visited[ny][nx] = True
q.append((ny, nx))
maps[ny][nx] = maps[y][x]+1
if maps[n-1][m-1]==1:
return -1
else:
return maps[n-1][m-1]
๊ฒฐ๊ณผ
[์ ์ถ๋ ฅ ์ #1]


maps[n-1][m-1]์ ๋๋ฌ ๊ฐ๋ฅํ๋ฉฐ ์ต๋จ๊ฒฝ๋ก๋ 11์ด๋ค. maps[1][4]์์ ์๋ ๋ฐฉํฅ์ธ maps[2][4]๋ ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ ์ง์ ์ด๊ธฐ ๋๋ฌธ์ ํ์ ๋ฃ์ง ์๋๋ค.
[์
์ถ๋ ฅ ์ #2]


maps[n-1][m-1]์ ๋๋ฌ ๋ถ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ -1์ return ํ๋ค.
'๐ก Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ฌ๊ท] ์ฌ๊ท ํจ์์ stringify ๊ตฌํ (0) | 2022.09.21 |
---|---|
[๊ทธ๋ํ ํ์] DFS, BFS ์ ๋ฆฌ (with C++) (0) | 2022.07.18 |