티스토리 뷰
https://programmers.co.kr/learn/courses/30/lessons/12978
코딩테스트 연습 - 배달
5 [[1,2,1],[2,3,3],[5,2,2],[1,4,2],[5,3,1],[5,4,2]] 3 4 6 [[1,2,1],[1,3,2],[2,3,2],[3,4,3],[3,5,2],[3,5,3],[5,6,1]] 4 4
programmers.co.kr
[프로그래머스][C++] 배달
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int dijkstra(int N, int K, vector<vector<int>> map) {
int ret = 0;
priority_queue<pair<int, int>> pq;
vector<int> dist(N + 1, 0x7fffffff);
pq.push({ 0,1 });
dist[1] = 0;
while (!pq.empty()) {
int d = -pq.top().first;
int t = pq.top().second;
pq.pop();
for (int i = 1; i <= N; i++) {
if (map[t][i]) {
if (dist[i] > d + map[t][i]) {
dist[i] = d + map[t][i];
pq.push({ -dist[i], i });
}
}
}
}
for (int i = 1; i <= N; i++) {
if (dist[i] <= K) ret++;
}
return ret;
}
int solution(int N, vector<vector<int> > road, int K) {
vector<vector<int>> map(N + 1, vector<int>(N + 1, 0));
for (int i = 0; i < road.size(); i++) {
int n1 = road[i][0], n2 = road[i][1], dis = road[i][2];
if (map[n1][n2] == 0 || map[n1][n2] > dis) {
map[n1][n2] = dis;
map[n2][n1] = dis;
}
}
return dijkstra(N, K, map);
}
'Problem Solving' 카테고리의 다른 글
[프로그래머스][C++] 땅따먹기 (0) | 2022.06.23 |
---|---|
[프로그래머스][C++] 다음 큰 숫자 (0) | 2022.06.21 |
[백준][C++] 14500 테트로미노 (0) | 2022.06.20 |
[프로그래머스][C++] 괄호 회전하기 (0) | 2022.06.19 |
[프로그래머스][C++] 피로도 (0) | 2022.06.15 |
댓글