728x90
반응형
문제 링크
조건
- a와 b를 잇는 도로가 여러 개 있을 수 있다.
문제 풀이
1. 노드별 거리를 무한으로 하는 배열 생성(1부터 사용하기 위해 N+1의 배열 생성)
2. 인접한 노드별 가중치의 정보를 담고 있는 배열 생성
3. 인접한 노드별 가중치의 정보를 담고 있는 배열에 데이터 추가
4. 1번 마을에서부터 우선순위 큐 시작 및 초기값 0 할당
5. 우선순위 큐 배열에 값이 없을 때까지 반복
6. 연결된 노드에서의 값이 현재의 값 + 해당 노드의 가중치보다 클 경우, 값을 대체하고 우선순위 큐에 데이터 추가
7. K 이하의 시간에 배달되는 값 filter
정답 코드
function solution(N, road, K) {
const dist = Array(N + 1).fill(Infinity); // 1. 노드별 거리를 무한으로 하는 배열 생성
const adj = Array.from({ length: N + 1 }, () => []); // 2. 인접한 노드별 가중치의 정보를 담고 있는 배열 생성
// 3. 인접한 노드별 가중치의 정보를 담고 있는 배열에 데이터 추가
road.forEach(([a, b, c]) => {
adj[a].push({ to: b, time: c });
adj[b].push({ to: a, time: c });
});
// 4. 1번 마을에서부터 우선순위 큐 시작 및 초기값 0 할당
const pq = [{ to: 1, time: 0 }];
dist[1] = 0;
// 5. 우선순위 큐 배열에 값이 없을 때까지 반복
while (pq.length) {
let { to, time } = pq.pop();
// 6. 연결된 노드에서의 값이 현재의 값 + 해당 노드의 가중치보다 클 경우, 값을 대체하고 우선순위 큐에 데이터 추가
adj[to].forEach((next) => {
if (dist[next.to] > dist[to] + next.time) {
dist[next.to] = dist[to] + next.time;
pq.push(next);
}
});
}
// 7. K이하의 시간에 배달되는 값 filter
return dist.filter((item) => item <= K).length;
}
참고자료
질문이나 잘못된 점은 댓글로 남겨주세요 :)💖
반응형
728x90
반응형
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스/더 맵게] - JS로 힙 직접 구현해보기 (0) | 2023.08.08 |
---|---|
[프로그래머스-문자열 다루기 기본] 지수 표기법, 그게 뭔데? (2) | 2023.04.19 |
[프로그래머스] Lv2. 행렬의 곱셈 (0) | 2023.03.29 |
[프로그래머스] Lv2. 땅따먹기 (0) | 2023.03.28 |
[프로그래머스] Lv2. 구명보트 (2) | 2023.03.22 |
댓글