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
다익스트라에 대해 공부하고 조금 이따가 풀었는데 그새 까먹어서 푸는데 애좀 먹었다...
https://m.blog.naver.com/ndb796/221234424646
23. 다익스트라(Dijkstra) 알고리즘
다익스트라(Dijkstra) 알고리즘은 다이나믹 프로그래밍을 활용한 대표적인 최단 경로(Shortest Path) 탐...
blog.naver.com
소스코드
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int a, b ,c, d;
int solution(int N, vector<vector<int> > road, int K) {
vector <int> w(N+1,1312312);
int answer = 0;
//인접리스트 <노드, 거리>
vector<vector<pair<int,int> > > v(N+1);
queue<pair<int,int>> q;
pair<int, int> p;
for(int i = 0; i < road.size(); i++) {
//노드1, 노드2, 가중치
a = road[i][0];
b = road[i][1];
c = road[i][2];
// v[a].push_back({b,c});
// v[b].push_back({a,c});
v[a].push_back(make_pair(b,c));
v[b].push_back(make_pair(a,c));
}
q.push(make_pair(1,0));
w[1] = 0;
while(!q.empty()) {
p = q.front();
//현 노드, 현 가중치
a = p.first;
b = p.second;
q.pop();
for(int i = 0; i < v[a].size(); i++) {
c = v[a][i].first;
d = v[a][i].second;
//이미 더 작으면 넘기기
if(w[c] < w[a]+d) continue;
//가중치 바꾸기
w[c] = w[a]+d;
q.push(make_pair(c, w[c]));
//q.push({v[a][0], w[v[a][0]]});
}
}
for(int i = 1; i <= N ; i++) {
if(w[i]<=K) answer++;
}
// [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
//cout << "Hello Cpp" << endl;
return answer;
}
'CodingTest Practice > Programmers' 카테고리의 다른 글
프로그래머스 : 정수 삼각형 (C++, Lv.3, DP_다이나믹 프로그래밍) (0) | 2022.06.09 |
---|---|
프로그래머스 : N-Queen (C++, Lv.3, 백트래킹) (0) | 2022.06.09 |
프로그래머스 : String, Date (SQL, ORACLE) (0) | 2022.06.06 |
프로그래머스 : IS NULL (SQL, ORACLE) (0) | 2022.06.06 |
프로그래머스 : GROUP BY (SQL, ORACLE) (0) | 2022.06.06 |