https://school.programmers.co.kr/learn/courses/30/lessons/12978
λ¬Έμ μ€λͺ
Nκ°μ λ§μλ‘ μ΄λ£¨μ΄μ§ λλΌκ° μμ΅λλ€. μ΄ λλΌμ κ° λ§μμλ 1λΆν° NκΉμ§μ λ²νΈκ° κ°κ° νλμ© λΆμ¬λμ΄ μμ΅λλ€. κ° λ§μμ μλ°©ν₯μΌλ‘ ν΅νν μ μλ λλ‘λ‘ μ°κ²°λμ΄ μλλ°, μλ‘ λ€λ₯Έ λ§μ κ°μ μ΄λν λλ μ΄ λλ‘λ₯Ό μ§λμΌ ν©λλ€. λλ‘λ₯Ό μ§λ λ 걸리λ μκ°μ λλ‘λ³λ‘ λ€λ¦ λλ€. νμ¬ 1λ² λ§μμ μλ μμμ μμ κ° λ§μλ‘ μμ λ°°λ¬μ νλ €κ³ ν©λλ€. κ° λ§μλ‘λΆν° μμ μ£Όλ¬Έμ λ°μΌλ €κ³ νλλ°, Nκ°μ λ§μ μ€μμ K μκ° μ΄νλ‘ λ°°λ¬μ΄ κ°λ₯ν λ§μμμλ§ μ£Όλ¬Έμ λ°μΌλ €κ³ ν©λλ€. λ€μμ N = 5, K = 3μΈ κ²½μ°μ μμμ λλ€.
μ κ·Έλ¦Όμμ 1λ² λ§μμ μλ μμμ μ [1, 2, 4, 5] λ² λ§μκΉμ§λ 3 μ΄νμ μκ°μ λ°°λ¬ν μ μμ΅λλ€. κ·Έλ¬λ 3λ² λ§μκΉμ§λ 3μκ° μ΄λ΄λ‘ λ°°λ¬ν μ μλ κ²½λ‘κ° μμΌλ―λ‘ 3λ² λ§μμμλ μ£Όλ¬Έμ λ°μ§ μμ΅λλ€. λ°λΌμ 1λ² λ§μμ μλ μμμ μ΄ λ°°λ¬ μ£Όλ¬Έμ λ°μ μ μλ λ§μμ 4κ°κ° λ©λλ€.
λ§μμ κ°μ N, κ° λ§μμ μ°κ²°νλ λλ‘μ μ 보 road, μμ λ°°λ¬μ΄ κ°λ₯ν μκ° Kκ° λ§€κ°λ³μλ‘ μ£Όμ΄μ§ λ, μμ μ£Όλ¬Έμ λ°μ μ μλ λ§μμ κ°μλ₯Ό return νλλ‘ solution ν¨μλ₯Ό μμ±ν΄μ£ΌμΈμ.
μ νμ¬ν
- λ§μμ κ°μ Nμ 1 μ΄μ 50 μ΄νμ μμ°μμ λλ€.
- roadμ κΈΈμ΄(λλ‘ μ 보μ κ°μ)λ 1 μ΄μ 2,000 μ΄νμ λλ€.
- roadμ κ° μμλ λ§μμ μ°κ²°νκ³ μλ κ° λλ‘μ μ 보λ₯Ό λνλ λλ€.
- roadλ κΈΈμ΄κ° 3μΈ λ°°μ΄μ΄λ©°, μμλλ‘ (a, b, c)λ₯Ό λνλ
λλ€.
- a, b(1 ≤ a, b ≤ N, a != b)λ λλ‘κ° μ°κ²°νλ λ λ§μμ λ²νΈμ΄λ©°, c(1 ≤ c ≤ 10,000, cλ μμ°μ)λ λλ‘λ₯Ό μ§λλλ° κ±Έλ¦¬λ μκ°μ λλ€.
- λ λ§μ a, bλ₯Ό μ°κ²°νλ λλ‘λ μ¬λ¬ κ°κ° μμ μ μμ΅λλ€.
- ν λλ‘μ μ λ³΄κ° μ¬λ¬ λ² μ€λ³΅ν΄μ μ£Όμ΄μ§μ§ μμ΅λλ€.
- Kλ μμ λ°°λ¬μ΄ κ°λ₯ν μκ°μ λνλ΄λ©°, 1 μ΄μ 500,000 μ΄νμ λλ€.
- μμμ λ λ§μκ°μ νμ μ΄λ κ°λ₯ν κ²½λ‘κ° μ‘΄μ¬ν©λλ€.
- 1λ² λ§μμ μλ μμμ μ΄ K μ΄νμ μκ°μ λ°°λ¬μ΄ κ°λ₯ν λ§μμ κ°μλ₯Ό return νλ©΄ λ©λλ€.
λ΄ μ½λ
κ°μ€μΉκ° μλ λ Έλ κ° μ΅λ¨ 거리λ₯Ό ꡬνλ μκ³ λ¦¬μ¦μΈ 'λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦' μ μ¬μ©νμ¬ νμλ€. μμ§ μ΄ μ νμ μ΅μν΄μ§μ§ μμ κ² κ°μ μ’ λͺ¨μμ νμ΄λ΄μΌκ² λ€.
#include <iostream>
#include <vector>
#include <queue>
#include <limits>
using namespace std;
// κ±°λ¦¬κΈ°μ€ μ€λ¦μ°¨μ μ λ ¬
struct comp {
bool operator()(pair<int, int> p1, pair<int, int>p2)
{
if (p1.second <= p2.second)
return true;
return false;
}
};
int solution(int N, vector<vector<int> > road, int K) {
int answer = 0;
int max_int = numeric_limits<int>::max();
vector<vector<int>> country_map(N, vector<int>(N, max_int));
vector<int> distance(N, max_int);
priority_queue<pair<int, int>, vector<pair<int, int>>, comp> q;
for (auto r : road)
{
int n1 = r[0] - 1;
int n2 = r[1] - 1;
int d = r[2];
country_map[n1][n2] = country_map[n1][n2] < d ? country_map[n1][n2] : d;
country_map[n2][n1] = country_map[n2][n1] < d ? country_map[n2][n1] : d;
}
// 0λΆν° iκΉμ§ κ°λ μ΅λ¨ 거리 μ°ΎκΈ°(λ€μ΅μ€νΈλΌ)
distance[0] = 0;
q.emplace(make_pair(0, 0));
while (!q.empty())
{
auto top = q.top();
q.pop();
int n = top.first;
int d = top.second;
for (int i = 0; i < country_map[n].size(); ++i)
{
if(country_map[n][i] >= max_int)
continue;
int village_node = i;
int village_distance = country_map[n][i] + d;
if (village_distance <= distance[village_node])
{
distance[village_node] = village_distance;
q.emplace(make_pair(village_node, village_distance));
}
}
}
// Kμ΄λ΄μΈ λ
Έλ μ°ΎκΈ°
for (int i = 0; i < distance.size(); ++i)
{
if (distance[i] <= K)
++answer;
}
return answer;
}
'π₯οΈ Study Note > Coding Test' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[νλ‘κ·Έλλ¨Έμ€]level.2 - κ΄νΈ νμ νκΈ°(C++) (0) | 2023.07.12 |
---|---|
[νλ‘κ·Έλλ¨Έμ€]level.2 - λ§λ²μ μλ¦¬λ² μ΄ν°(C++) (0) | 2023.07.11 |
[νλ‘κ·Έλλ¨Έμ€]level.2 - λ ν ν© κ°κ² λ§λ€κΈ°(C++) (0) | 2023.07.04 |
[νλ‘κ·Έλλ¨Έμ€]level.2 - Nκ°μ μ΅μ곡배μ(C++) (0) | 2023.07.03 |
[νλ‘κ·Έλλ¨Έμ€]level.2 - μ νμ μκ° μ΄λ(C++) (0) | 2023.06.30 |