from collections import deque
def solution(maps):
visited = [[0] * len(maps[0]) for _ in range(len(maps))]
visited[0][0] = 1
q = deque()
q.append((0, 0))
while q:
cy, cx = q.popleft()
for dy, dx in [(0, 1), (1, 0), (0, -1), (-1, 0)]:
ny = cy + dy
nx = cx + dx
if 0 <= ny < len(maps) and 0 <= nx < len(maps[0]):
if visited[ny][nx] == 0 and maps[ny][nx] == 1:
if ny == len(maps)-1 and nx == len(maps[0]) -1:
visited[ny][nx] += visited[cy][cx] + 1
print(visited)
return visited[ny][nx]
q.append((ny, nx))
visited[ny][nx] += visited[cy][cx] + 1
return -1
bfs를 활용한 풀이. 방문배열을 캐릭터가 이동 한 칸의 개수로 놓고 방문 할 때 마다 그 전 방문의 개수 + 1을 해준다.
만약 목표지점에 도착 한다면 그 지점의 값을 return 해주고 목표지점을 찾지 못하고 bfs가 끝나게 되면 -1을 return 해준다.
'Programmers' 카테고리의 다른 글
[프로그래머스 / 파이썬 풀이] 가장 먼 노드 (0) | 2023.01.10 |
---|---|
[프로그래머스 / 파이썬 풀이] 네트워크 (0) | 2023.01.09 |
[프로그래머스 / 파이썬 풀이] 모음사전 (0) | 2023.01.06 |
[프로그래머스 / 파이썬 풀이] 피로도 (0) | 2023.01.05 |
[프로그래머스 / 파이썬 풀이] 카펫 (0) | 2023.01.05 |