알고리즘/코딩 테스트
[코딩테스트] 프로그래머스 javascript 2단계 - 배달 , 다익스트라
Judith Hopps
2023. 2. 9. 15:58
반응형
배달
- 이 문제는 다익스트라 즉 최단거리를 찾는 문제이다.
- 한 노드에서 모든 노드를 검색하는 문제를 다익스트라라고 말한다.
각각의 노드를 방문했을 때 출발지에서 현재 노드까지 가장 가까운 시간만을 저장하면 된다.
문제 풀이
https://school.programmers.co.kr/learn/courses/30/lessons/12978
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 설명
1. 처음에 노드를 기준으로 총 시간과 이동방향 모두를 저장할 배열을 생성한다.
- 이때, N+1 즉 노드의 개수 보다 하나 더 추가하여 구현을 쉽게 한다.
2. queue를 생성해서 현재 total보다 노드를 방문하는 게 더 시간이 적을 때, queue에 넣고 total을 갱신한다.
전체 코드는 다음과 같다.
function solution(N, road, K) {
//1. 총 시간과 방향 배열 저장
const total = new Array(N+1).fill(Infinity)
const dir = Array.from({length:N+1},() => [])
total[1] = 0
road.forEach(([s,e,t])=>{
dir[s].push({to:e,time:t})
dir[e].push({to:s,time:t})
})
// console.log(road)
// 2. queue 생성
let queue = [{to:1,time:0}]
while(queue.length){
const {to,time} = queue.shift()
dir[to].forEach((step)=>{
if(total[step.to]>total[to]+step.time){
total[step.to] = total[to]+step.time
queue.push(step)
}
})
}
return total.filter(v=>v<=K).length
}
반응형