[プログラマ]配信
📒コンセプトの使用
📌問題の説明
Nの村からなる国があります.この国の村ごとに1からNまで番号が付けられています.それぞれの村は双方向に通行する道を結んでおり、異なる村の間を移動するときはこの道を通らなければならない.道路を通るのにかかる時間は道路によって異なります.今の1番村のレストランから食べ物を各村に送りたいです.各村から注文を受けたいのですが、N村の中でK時間以下に配達できる村でしか注文を受けられないと思います.
村落個数N、各村落を結ぶ道路の情報路、配達可能な食べ物の時間Kをパラメータとした場合は、解関数を完了し、食べ物の注文を受けられる村落個数を返してください.
せいげんじょうけん
a,b(1≦a,b≦N,a!=b)は道路が接続された2つの村の番号であり、c(1≦c≦10000,cは自然数)は道路を通過するのに要する時間である.
📌インプリメンテーション
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int solution(int N, vector<vector<int> > road, int K) {
int answer = 0;
//Dijkstra사용을 위한 queue
queue<int> current;
//최소값을 저장하는 백터
vector<int> dist(N+1, 100000);
//마을의 경로와 가중치 저장.
vector<vector<pair<int, int>>> route(N+1);
current.push(1);
dist[1]=0;
for(int i=0; i<road.size(); i++){
route[road[i][0]].push_back({road[i][1], road[i][2]});
route[road[i][1]].push_back({road[i][0], road[i][2]});
}
//Dijkstra Algorithm사용
while(!current.empty()){
int cur=current.front();
current.pop();
for(int i=0; i<route[cur].size(); i++){
if(dist[route[cur][i].first]==100000||dist[route[cur][i].first]>dist[cur]+route[cur][i].second){
dist[route[cur][i].first]=dist[cur]+route[cur][i].second;
current.push(route[cur][i].first);
}
}
}
for(int i=1; i<dist.size(); i++){
if(dist[i]<=K){
answer++;
}
}
return answer;
}
📌注意点
Reference
この問題について([プログラマ]配信), 我々は、より多くの情報をここで見つけました https://velog.io/@gomhyeok/프로그래머스배달テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol