티스토리 뷰
728x90
https://programmers.co.kr/learn/courses/30/lessons/1844
- 해설 :
NxN의 2차원 배열의 (0,0) 지점에서 시작하는 사람이 벽으로 막히지 않은 길을 따라 최종 목적지인 (N-1,N-1)까지 도달하려 할 때, 최단거리로 도착할 수 있는 거리를 출력하는 문제이다.
- 풀이 :
BFS나 DFS를 사용하는 문제이다. 나는 BFS가 더 익숙해서 BFS로 해결하였다. 시작점에서부터 노드들을 탐색하는데 이미 탐색한 노드인 경우 더이상 진행하지 않게끔 구현하였다. 그 이유는 이미 탐색한 경우 무조건 현재 경로로 가는 것보다 더 빠른 경로이기 때문이다. (bfs로 한 칸씩 전진하기 때문)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | from collections import deque dx = [-1,1,0,0] dy = [0,0,-1,1] def solution(maps): answer = 0 l1 = len(maps[0]) l2 = len(maps) c = [[10001 for _ in range(l1)] for _ in range(l2)] c[0][0] = 1 queue = deque() queue.append([0,0]) while queue: x,y = queue.popleft() for i in range(4): ax = x + dx[i] ay = y + dy[i] if 0 <= ax < l2 and 0 <= ay < l1: if maps[ax][ay] == 1 and c[ax][ay] == 10001: queue.append([ax,ay]) c[ax][ay] = min(c[ax][ay],c[x][y]+1) return c[-1][-1] if c[-1][-1] != 10001 else -1 | cs |
320x100
'Algorithm > DFS & BFS' 카테고리의 다른 글
(Python) - BOJ(1012번) : 유기농 배추 (0) | 2022.01.24 |
---|---|
(Python) - 프로그래머스 : 전력망을 둘로 나누기 (0) | 2022.01.21 |
(Python) - 프로그래머스 : 네트워크 (0) | 2022.01.20 |
(Python) - 프로그래머스(2021 카카오 채용연계형 인턴십) : 거리두기 확인하기 (0) | 2022.01.19 |
(Python) - 프로그래머스 : 가장 먼 노드 (0) | 2022.01.18 |
댓글
© 2022 WonSeok, All rights reserved