일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 수학
- KAKAO BLIND RECRUITMENT
- 정렬
- Re
- 재귀함수
- 백준
- heapq
- 파이썬
- 이분탐색
- 위클리 챌린지
- 추석맞이 코딩챌린지
- java
- programmers
- divmod
- 동적 계획법
- python
- Combinations
- Zip
- 그리디
- 다익스트라
- 프로그래머스
- Set
- 자바
- backjoon
- lambda
- 카카오
- BFS
- 정규식
- dfs
- DateTime
Archives
- Today
- Total
상상쓰
[프로그래머스] 게임 맵 최단거리 본문
https://programmers.co.kr/learn/courses/30/lessons/1844
BFS, 너비 우선 탐색이므로 가장 처음 방문했을 때 계산된 maps[][] 값이 최단 거리가 된다.
from collections import deque
def solution(maps):
answer = -1
n = len(maps)
m = len(maps[0])
visit = [[0 for j in range(m)] for i in range(n)]
queue = deque([[0, 0]])
visit[0][0] = 1
d = [(0, 1), (0, -1), (1, 0), (-1, 0)]
while queue:
x, y = queue.popleft()
for i in d:
x_ = x + i[0]
y_ = y + i[1]
if x_ >= 0 and x_ < n and y_ >=0 and y_ < m and visit[x_][y_] == 0 and maps[x_][y_] == 1:
visit[x_][y_] = 1
maps[x_][y_] = maps[x_][y_] + maps[x][y]
if x_ == n - 1 and y_ == m - 1:
answer = maps[x_][y_]
queue.clear()
break
else:
queue.append([x_, y_])
return answer
print(solution([[1, 0, 1, 1, 1], [1, 0, 1, 0, 1], [1, 0, 1, 1, 1], [1, 1, 1, 0, 1], [0, 0, 0, 0, 1]])) # 11
'Coding Test' 카테고리의 다른 글
[프로그래머스] 자물쇠와 열쇠 (0) | 2021.06.02 |
---|---|
[프로그래머스] 괄호 회전하기 (0) | 2021.06.01 |
[프로그래머스] 무지의 먹방 라이브 (0) | 2021.06.01 |
[프로그래머스] 배달 (0) | 2021.05.31 |
[프로그래머스] 방문 길이 (0) | 2021.05.30 |
Comments