|
์ฝ๋ ์์ฑํ๊ธฐ
from collections import deque
move = [[1, 0], [-1, 0], [0, 1], [0, -1]]
def solution(maps):
n = len(maps[0])
k = len(maps)
visited = [[1]*n for _ in range(k)]
queue = deque()
queue.append([0, 0])
while queue:
now = queue.popleft()
for m in move:
x = m[0]+now[0]
y = m[1]+now[1]
if 0 <= x < n and 0 <= y < k and visited[y][x] == 1 and maps[y][x] == 1:
visited[y][x] = visited[now[1]][now[0]] + 1
queue.append([x, y])
if visited[k-1][n-1] > 1:
return visited[k-1][n-1]
else:
return -1
Python
๋ณต์ฌ
|
์ฝ๋ ์ค๋ช
ํ๊ธฐ
์๊ณ ๋ฆฌ์ฆ ์คํฐ๋์์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ bfs ํ๋ค๊ฐ ์คํจํ ๊ฒฝํ์ด ์์ด์ dfs๋ก ์๋ํ์๋ค.
2์ฐจ์ ๋งต์ ์์ง์ด๋ฏ๋ก ๋์๋จ๋ถ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์๋ move ๋ฐฐ์ด์ ์ ์ธํ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๋๊ฐ ์๋ฆฌ๋ ํ์ํ ์ ์๋๋ก maps์ ๋์ผํ ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด visited๋ฅผ ๋ง๋ค์๋ค. ๋ชจ๋ ์๋ 1๋ก ์ด๊ธฐํํ์๋ค.
1.
์ฒ์์ (0, 0)์์ ์์ํ๋ฏ๋ก (0, 0)์ ํ์ ๋ฃ์ด์ค๋ค.
2.
๋์๋จ๋ถ ๋ฐฉํฅ์ ์ฒดํฌํ๋ฉฐ x, y ์ขํ๊ฐ 2์ฐจ์ ๋ฐฐ์ด ์์ ์์ผ๋ฉฐ, ์ง๋๊ฐ์ง ์์ ์นธ (1)์ด๋ฉฐ, map์์ ๋ฒฝ์ด ์๋ ๊ณณ์ ํ์ ๋ฃ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ง๋๊ฐ ๊ฒ์ ํ์ํ๊ธฐ ์ํด visited[y][x]์ ๊ฐ์ ์๋ ์นธ์ ๊ฐ+1๋ก ๋ฐ๊ฟ์ค๋ค.
3.
ํ๊ฐ ์์ด์ง ๋ ๊น์ง ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค.
4.
๋ง์ง๋ง ์นธ (n-1, k-1)๊น์ง ๊ฐ๋ฉด visited[k-1][n-1]์ด 1์ด ์๋ ๊ฒ์ด๋ฏ๋ก ์ด๋ฅผ ๋ฐํํ๋ค. ํ์ง๋ง ๋๋ฌํ์ง ๋ชปํ๋ค๋ฉด 1์ด๋ฏ๋ก -1์ ๋ฐํํ๋ค.