[프로그래머스] 배달 (javascript)
728x90
반응형
function solution(N, road, K) {
var answer = 0;
const dist={};//양방향 정보 저장
for(let i=0;i<road.length;i++){
const [s,e,cost]=road[i];
if(dist[s]){
dist[s].push([e,cost]);//각 점에서 갈 수 있는 점과 비용 저장
}else{
dist[s]=[[e,cost]];
}
if(dist[e]){
dist[e].push([s,cost]);
}else{
dist[e]=[[s,cost]];
}
}
let vis=Array(2).fill(0).map(()=>Array(N+1).fill(-1));//1에서 갈 수 있는 지점
const pq=[[1,0]];
while(pq.length>0){
pq.sort((a,b)=>a[1]-b[1]);//비용 적은 순 리턴
const [v,cost]=pq.shift();
if(vis[1][v]==-1){//아직 방문 안되었다. 나중에 같은 점 방문하는 경우 항상 비용이 크다
vis[1][v]=cost;//지점 업데이트
for(let k=0;k<dist[v].length;k++){
let next=dist[v][k][0];
let total=cost+dist[v][k][1];
if(total>K)continue;//거리가 k보다 크면 안된다.
if(vis[1][next]==-1){//아직 방문 안한 곳이라면 진행
pq.push([next,total]);
}
}
}
}
for(let i=1;i<=N;i++){//방문할 수 있는 곳의 개수를 센다
if(vis[1][i]!=-1)answer+=1;//자기자신도 포함한다.
}
return answer;
}
728x90
반응형
'프로그래머스' 카테고리의 다른 글
[프로그래머스] 행렬 테두리 회전하기 (javascript) (0) | 2021.04.30 |
---|---|
[프로그래머스] n 개의 최소공배수 (javascript) (0) | 2021.04.30 |
[프로그래머스] 점프와 순간 이동 (Javascript) (0) | 2021.04.28 |
[프로그래머스] 방문 길이 (javascript) (0) | 2021.04.24 |
[프로그래머스] 가장 먼 노드 (javascript, bfs) (0) | 2021.04.20 |
TAGS.