일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 그리디
- lambda
- java
- python
- 이분탐색
- 파이썬
- 정렬
- dfs
- 동적 계획법
- backjoon
- Zip
- divmod
- Set
- Combinations
- 카카오
- 다익스트라
- 프로그래머스
- heapq
- 위클리 챌린지
- programmers
- DateTime
- KAKAO BLIND RECRUITMENT
- 정규식
- 재귀함수
- 수학
- 자바
- Re
- 백준
- BFS
- 추석맞이 코딩챌린지
Archives
- Today
- Total
상상쓰
[프로그래머스] 배달 본문
https://programmers.co.kr/learn/courses/30/lessons/12978
다익스트라 알고리즘을 이용하여 1 에서 출발하여 각 도착하는 번호에 대한 최단 시간을 구하면 된다.
1 에서 출발하여 도작하는 번호의 시간을 계속 비교하면서 더 적은 시간을 distances 에 넣어주면 된다. distances[b] 가 0 인 것은 c 가 1 이상이므로 처음 지나는 경로라는 뜻으로 b 를 queue 에 값을 넣어준다.
모든 도로가 이어져 있으므로 각 번호의 distances 의 값은 존재하며, 방문했던 경로는 시간이 길어지므로 queue 에 넣지 않는다.
from collections import defaultdict, deque
def solution(N, road, K):
answer = 0
dic = defaultdict(list)
for i in road:
a, b, c = i
dic[a].append([b, c])
dic[b].append([a, c])
queue = deque([1])
distances = defaultdict(int)
while queue:
a = queue.popleft()
for b, c in dic[a]:
if distances[b] > distances[a] + c or distances[b] == 0:
distances[b] = distances[a] + c
queue.append(b)
for key in distances.keys():
if distances[key] <= K or key == 1:
answer = answer + 1
return answer
print(solution(5, [[1, 2, 1], [2, 3, 3], [5, 2, 2], [1, 4, 2], [5, 3, 1], [5, 4, 2]], 3)) # 4
'Coding Test' 카테고리의 다른 글
[프로그래머스] 게임 맵 최단거리 (0) | 2021.06.01 |
---|---|
[프로그래머스] 무지의 먹방 라이브 (0) | 2021.06.01 |
[프로그래머스] 방문 길이 (0) | 2021.05.30 |
[프로그래머스] 광고 삽입 (0) | 2021.05.28 |
[프로그래머스] 입국심사 (0) | 2021.05.28 |
Comments