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 | road | K | result |
|---|---|---|---|
| 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 |
μ μΆλ ₯ μ μ€λͺ
μ
μΆλ ₯ μ #1
λ¬Έμ μ μμμ κ°μ΅λλ€.
μ μΆλ ₯ μ #2
μ£Όμ΄μ§ λ§μκ³Ό λλ‘μ λͺ¨μμ μλ κ·Έλ¦Όκ³Ό κ°μ΅λλ€.

1λ² λ§μμμ λ°°λ¬μ 4μκ° μ΄νκ° κ±Έλ¦¬λ λ§μμ [1, 2, 3, 5] 4κ°μ΄λ―λ‘ 4λ₯Ό return ν©λλ€.
import java.util.*;
class Solution {
// λ
Έλ ν΄λμ€
static class Node {
int a, b, c;
public Node(int a, int b, int c) {
this.a = a;
this.b = b;
this.c = c;
}
}
public int solution(int N, int[][] road, int K) {
// 1λ² λ§μμ 무쑰건 κ° μ μκΈ° λλ¬Έμ 1λ‘ μ΄κΈ°ν
int answer = 1;
// κ·Έλνλ₯Ό μ μ₯νκΈ° μν λ°°μ΄
ArrayList<ArrayList<Node>> map = new ArrayList<>();
// λ°°μ΄λ§λ€ arraylist μμ±
for(int i = 0; i < N + 1; i++)
map.add(new ArrayList<>());
// road λ°°μ΄μ μλ κ°μ μ¬μ©ν΄μ mapμ μ μ₯
for(int i = 0; i < road.length; i++) {
map.get(road[i][0]).add(new Node(road[i][0], road[i][1], road[i][2]));
map.get(road[i][1]).add(new Node(road[i][1], road[i][0], road[i][2]));
}
// ν μμ±
Queue<Node> q = new LinkedList<>();
// κ° λ§μλ§λ€ 걸리λ μκ°μ μ μ₯
int[] time = new int[N+1];
// MAX_VALUEλ‘ μ΄κΈ°ν
for(int i = 2; i < N+1; i++)
time[i] = Integer.MAX_VALUE;
// 1λ² λ§μκ³Ό μ°κ²°λ λͺ¨λ κ°μ νμ μ μ₯
q.addAll(map.get(1));
// νμ κ°μ΄ μμ λκΉμ§ λ°λ³΅
while(!q.isEmpty()) {
Node n = q.poll();
// aμμ bλ‘ κ° λ μκ°μ΄ bλ³΄λ€ ν¬λ©΄ continue
if(time[n.b] <= time[n.a] + n.c)
continue;
// bκΉμ§ κ±Έλ¦° μκ°μ time[b]μ μ μ₯
time[n.b] = time[n.a] + n.c;
// b λ§μκ³Ό μ°κ΄λ λͺ¨λ κ°μ νμ μ μ₯
q.addAll(map.get(n.b));
}
// time λ°°μ΄μ κΈΈμ΄λ§νΌ λ°λ³΅
// Kλ³΄λ€ μκ±°λ κ°μ κ²½μ° answer μ¦κ°
for(int i = 2; i < time.length; i++)
if(time[i] <= K)
answer++;
return answer;
}
}
κ·Έλνμ bfs νμμ ν΅ν΄ μ§ννμλ€.
μ μ₯νκΈ° μ½λλ‘ Node ν΄λμ€λ₯Ό λ§λ€μλ€. aλ μμ λ§μ, bλ λμ°© λ§μ, cλ κ±Έλ¦° μκ°μ λνλ΄λ©° κ°μ μ μ₯νκΈ° μν΄μ μ¬μ©ν μμ μ΄λ€.
answer = 1λ‘ μ΄κΈ°νλ₯Ό μ§ννλλ° 1λ² λ§μμ 무쑰건 κ° μ μκΈ° λλ¬Έμ΄λ€. λ°λΌμ 1λ² λ§μμ μ μΈν λ€λ₯Έ λ§μλ€μ ꡬν΄μ£Όλ©΄ λλ€.
κ·Έλνλ₯Ό μ μ₯νκΈ° μν΄ λ°°μ΄μ μ μΈνλ€. μ΄λ Nodeλ₯Ό μ¬μ©νλ€.
λ°°μ΄λ§λ€ ArrayListλ₯Ό μμ±ν΄μ€λ€.
μ΄μ road λ°°μ΄μ μλ κ°μ μ¬μ©ν΄μ κ·Έλνλ₯Ό μμ±ν κ²μ΄λ€. road[i][0]μ μμ λ§μ road[i][1]μ λμ°© λ§μ road[i][2]λ κ±Έλ¦° μκ°μ΄λ€. κ·Έλ°λ° μ΄λ μ€μν κ²μ μλ°©ν₯μ΄κΈ° λλ¬Έμ μμ λ§μκ³Ό λμ°© λ§μμ λ°κΎΌ μνλ‘λ μ μ₯μ ν΄μ£Όμ΄μΌνλ€λ κ²μ΄λ€. λ°λΌμ road[i][1]μ μμ λ§μλ‘ road[i][0]μ λμ°© λ§μλ‘ road[i][2]λ₯Ό κ±Έλ¦° μκ°μΌλ‘ κ°κ° μ μ₯ν΄μ€λ€.
bfs νμμ μ§ννκΈ° μν΄ νλ₯Ό μμ±νλ€. λν κ° λ§μλ§λ€ 걸리λ μκ°μ μ μ₯νκΈ° μν΄ intν λ°°μ΄λ μμ±νλ€.
timeμ κ°μ MAX_VALUEλ‘ μ΄κΈ°νλ₯Ό μμΌμ€λ€. λν 1λ² λ§μκ³Ό μ°κ²°λ λͺ¨λ κ°μ νμ μ μ₯νλ€. μ¬κΈ°κΉμ§ νλ©΄ bfs νμμ μ€λΉκ³Όμ μ λμ΄λ€.
bfs νμμ μ§ννλ€. νμ κ°μ΄ μμ λκΉμ§ λ°λ³΅μ μ§ννλ©° κ°μ νλ μ κ±°νλ€. Node nμ μ κ±°ν κ°μ μ μ₯νκ³ ifλ¬Έ λΉκ΅λ₯Ό μ§ννλ€. μ¬κΈ°μ μ£Όμν μ μ time λ°°μ΄μ μ΄κΈ°νν λ 2λΆν° μ§νμ νκΈ° λλ¬Έμ time[1]μλ 0μ΄ λ€μ΄μλ€λ κ²μ΄λ€. νμ¬ n.aμλ 1μ΄ λ¬΄μ‘°κ±΄ μ‘΄μ¬ν κ²μ΄κ³ , n.bλ 1κ³Ό μ°κ²°λ λ€λ₯Έ λ§μμ΄ λλ€. n.a + n.cκ° MAX_VALUEλ³΄λ€ μλ€λ©΄ ifλ¬Έμ λμ΄κ°κ³ time[n.b] = time[n.a] + n.cλ₯Ό μ¬μ©ν΄ 걸리λ μκ°μ μ μ₯νλ€. μ΄ν n.bμ νμλ μ§ννκΈ° μν΄ q.addAll(map.get(n.b))λ₯Ό μ¬μ©ν΄ n.b λ§μκ³Ό μ°κ΄λ λͺ¨λ κ°μ νμ μ μ₯ν΄μ€λ€.
μ΄λ° μμΌλ‘ μμ λ°λ³΅μ λͺ¨λ μ§νν λ€μ λΉ μ Έλμ€λ©΄ timeμλ κ° λ§μμ κ° μ μλ μ΅μκ°μ΄ μ μ₯μ΄ λμ΄μμ κ²μ΄λ€. λ°λ³΅λ¬Έμ ν΅ν΄ μ μ₯λ κ°μ΄ Kλ³΄λ€ μκ±°λ κ°μμ§ λΉκ΅λ₯Ό νκ³ μ‘°κ±΄μ λ§μ‘±νλ©΄ answerλ₯Ό μ¦κ°μμΌμ€λ€.
λͺ¨λ λ°λ³΅μ΄ λλ λ€ answerλ₯Ό λ°ννλ©΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μλ€!
κ·Έλν λ°©μκ³Ό bfs νμμ μ§νν΄μ λ¬Έμ λ₯Ό ν΄κ²°νλ€. μ΄ν λ€λ₯Έ λΆλ€μ νμ΄λ₯Ό 보기 μν΄ μ¬λ¬ λΈλ‘κ·Έλ₯Ό μ°Ύμλ΄€λλ° μ°μ μμ νλ₯Ό μ¬μ©νκ³ μ¬λ¬ μ΅μ νλ₯Ό μν λ°©μλ€μ μ¬μ©νλ κ±Έ λ³΄κ³ μ΄λ»κ² μ λ° μκ°μ΄ λ€κΉ κ°ννλ€. μ΄λ² λ¬Έμ λ₯Ό ν λ μκ°νλ©΄μ κΌ¬μ΄λ λΆλΆλ€μ΄ λ§μμ μ‘°κΈ νλ€μλ€. κ³΅μ± μ μ μΌλ©΄μ νμ΄λ λλλ° κ΄ν κ³ μ§μΌλ‘ νλ€κ° μ€νλ € μκ°μ λ μ°λ κ² κ°λ€..γ γ