[ 프로그래머스 ] 배달
문제
https://school.programmers.co.kr/learn/courses/30/lessons/12978
풀이
마을 간 연결 정보와 거리를 입력 받아 1번 마을과 k이하의 거리를 가진 마을들을 찾는 문제이다. 다익스트라 알고리즘을 토대로 마을 별 최소 거리를 측정, k이하의 거리를 가진 마을의 개수를 return한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
struct EDGE
{
int adj;
int w;
};
int solution(int N, vector<vector<int>> road, int K)
{
vector<vector<EDGE>> graph(N + 2);
int answer = 1;
for (int i = 0; i < road.size(); i++)
{
graph[road[i][0]].push_back({ road[i][1],road[i][2] });
graph[road[i][1]].push_back({ road[i][0],road[i][2] });
}
vector <int> strength(N + 2);
queue<int>q;
q.push(1);
while (!q.empty())
{
int current = q.front();
q.pop();
for (int i = 0; i < graph[current].size(); i++)
{
int current_strength = strength[current] + graph[current][i].w;
if (strength[graph[current][i].adj] == 0)
{
strength[graph[current][i].adj] = current_strength;
q.push(graph[current][i].adj);
}
else if (strength[graph[current][i].adj] > current_strength)
{
strength[graph[current][i].adj] = current_strength;
q.push(graph[current][i].adj);
}
}
}
for (int i = 2; i < strength.size(); i++)
{
if (strength[i] != 0 && strength[i] <= K)
{
answer++;
}
}
return answer;
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.