https://programmers.co.kr/learn/courses/30/lessons/1837
λ¬Έμ μ€λͺ
μΉ΄μΉ΄μ€ νμ κ°λ°μ Jay-Gλ λ€μ μ λ°μ΄νΈλ₯Ό μ€λΉνκΈ° μν΄ κ°μ μ¬νμ μν μ¬λ¬ νΌλλ°±μ λ°μλ€. κ·Έμ€μμ μλμ΄ μμ£Ό νμΉνλ μμΉλ₯Ό μΆμ²ν΄μ£ΌμμΌλ©΄ νλ€λ μκ²¬μ΄ λ§μλ€.
λ€μ μ λ°μ΄νΈ μ€λΉλ₯Ό μν΄ Jay-Gλ νμμ μΉνμ°¨ λ° μ΄λ κ²½λ‘λ₯Ό μμ§νμ¬ λΆμνκΈ° μμνμλ€. λ°μ΄ν°λ₯Ό λΆμνλ Jay-Gλ λͺ κ°μ§ νΉμ΄μ¬νμ λ°κ²¬νλ€. νμμ μ΄λ κ²½λ‘λ₯Ό GPSλ₯Ό ν΅ν΄ μμ§νκ² λλλ°, GPS μ νΈ λΆλ, ν΅μ μ€λ₯ λ± λ€μν μμΈμΌλ‘ μμΉμ μ€λ₯κ° λ°μν κ²μ μκ² λμλ€. λ€λ§ μΉμ°¨ μμΉμ νμ°¨ μμΉλ μ€λ₯κ° μλ κ²μΌλ‘ νμΈμ΄ λμλ€.
κ°λ°μ Jay-Gλ μμ§ν μ΄λ κ²½λ‘μ μ€λ₯λ₯Ό μ΅μνμΌλ‘ μμ νμ¬ μ’ λ μ νν μ΄λ κ²½λ‘λ₯Ό ꡬνκ³ μΆμ΄ νλ€.
νμλ λ€μκ³Ό κ°μ 쑰건μΌλ‘λ§ μ΄λνλ€. λ¨Όμ νμλ κ±°μ μ μ΄λν΄ λ€λλ©°, κ±°μ κ°μ μ΄λμ ν΄λΉνλ λλ‘κ° μλ κ²½μ°μλ§ κ°λ₯νλ€. λν, κ΅ν΅ μν©μ λ°λΌ νμλ ν κ±°μ μ 머무λ₯Ό μ μκ³ , μλ κΈΈμ λλμκ° μ μλ€. λͺ¨λ λλ‘λ λ°©ν₯μ΄ λ³λλ‘ μλ μ볡 λλ‘μ΄λ€.
μλ₯Ό λ€μ΄, μ κ·Έλνμμ νμκ° λ€μκ³Ό κ°μ΄ μκ°λλ³λ‘ μ΄λ κ²½λ‘λ₯Ό 보λ΄μλ€.
t | μμΉ |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 3 |
5 | 6 |
6 | 7 |
νμ§λ§ μμ νμκ° λ³΄λ΄μ¨ κ²½λ‘μλ κ±°μ 3μμ κ±°μ 6μΌλ‘ μ΄λν μ μλ λλ‘κ° μμΌλ―λ‘ μ΄λ κ²½λ‘μ μ€λ₯κ° μλ€.
μ΄λ¬ν μ€λ₯λ₯Ό μ΅μνμΌλ‘ μμ νμ¬ μ΄λ κ°λ₯ν κ²½λ‘λ‘ λ§λ€κ³ μΆλ€. μ΄ κ²½μ° 1νμ μ€λ₯λ₯Ό μμ νμ¬ λ€μκ³Ό κ°μ΄ μ΄λ κ°λ₯ν κ²½λ‘λ₯Ό λ§λ€ μ μλ€. μκ° t=4μ μμΉλ₯Ό κ±°μ 5λ‘ ν λ² μμ νλ©΄ μ΄λ κ°λ₯ν κ²½λ‘κ° λλ€.
t | μμΉ |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 5 |
5 | 6 |
6 | 7 |
μ΄μ λΉμ·νκ² μκ° t=4μ μμΉλ₯Ό κ±°μ 4λ‘ λ°κΎΈκ±°λ, μκ° t=5 μμΉλ₯Ό κ±°μ 5λ‘ λ°κΎΈλ©΄ μ΄λ κ°λ₯ν κ²½λ‘λ‘ λ§λ€ μ μλ€. μμ κ²½μ° μμ ν μ€λ₯μ κ°μλ 1κ°μ΄λ€.
t | μμΉ |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 4 |
5 | 6 |
6 | 7 |
t | μμΉ |
1 | 1 |
2 | 2 |
3 | 3 |
4 | 3 |
5 | 5 |
6 | 7 |
μμ κ°μ΄ νμκ° λ³΄λ΄μ¨ κ²½λ‘μμ μ΄λ κ°λ₯ν κ²½λ‘λ‘ λ§λλ μ΅μμ μ€λ₯ μμ νμλ₯Ό ꡬνμ¬λΌ.
μ λ ₯ νμ
μ£Όμ΄μ§λ μ λ ₯μ μ΄ λ€μ― κ°μ§λ‘, κ±°μ κ°μ nκ³Ό λλ‘μ κ°μ m, κ° κ±°μ κ°μ μ°κ²°λ λλ‘ μ 보 edge_list, νμκ° μκ°λλ³λ‘ 보λ΄μ€λ κ±°μ μ 보μ μ΄ κ°μ k, κ·Έλ¦¬κ³ λ¨Έλ¬Όλ λ κ±°μ μ μ 보 gps_logμ΄λ€. μ ν쑰건μ μλμ κ°λ€.
- 2 <= n <= 200
- 1 <= m <= 10,000
- 2 <= k <= 100
- edge_listλ m × 2 ν¬κΈ°μ 2μ°¨μ λ°°μ΄λ‘, κ° νμ λ κ°μ λλ‘κ° μλ λ κ±°μ μ λ²νΈλ₯Ό μλ―Ένλ€.
- κ±°μ μ λ²νΈλ 1λΆν° nκΉμ§ μ«μμ΄λ€.
- λͺ¨λ λλ‘λ μλ°©ν₯ ν΅νμ΄ κ°λ₯νλ€.
- μ λ ₯λλ λ°μ΄ν°μμ νμ λͺ¨λ κ±°μ κ° κ²½λ‘κ° μμμ΄ λ³΄μ₯λμ§ μλλ€.
- gps_logμ μμ κ±°μ κ³Ό λμ°© κ±°μ μ λ°λ μ μλ€.
μΆλ ₯ νμ
μ΄λ κ°λ₯ν κ²½λ‘λ‘ λ§λ€ μ μλ μ΅μμ μ€λ₯ μμ νμλ₯Ό 리ν΄νλ€. μ¬λ°λ₯Έ κ²½λ‘λ‘ μμ νλ κ²μ΄ λΆκ°λ₯ν κ²½μ° -1μ 리ν΄νλ€.
νμ΄
μμ¨....π€¦βοΈ
λ무 μ΄λ €μμ¨.... κ·Έλμ λ€λ₯Έ μ¬λλ€μ μ€λͺ μ λ§μ΄ μ°Έμ‘°ν΄μ ν΄κ²°γ·νλ€....
λμκ² λ무 μ΄λ €μ΄ DPπ₯Ά
dp[i][j] π gps_logμ i λ²μ§Έ μΈλ±μ€μ j κ±°μ μ΄ μ¨λ€λ©΄ 0λ² μΈλ±μ€λΆν° i λ² μΈλ±μ€κΉμ§ μ΄ λ³ν μ΅μ μ
1οΈβ£ j κ±°μ κ³Ό μ°κ²°λ κ±°μ μΌλ‘ μ΄λνλ κ²½μ°
2οΈβ£ μ΄λνμ§ μλ κ²½μ°
λ κ°μ§ λͺ¨λ νμΈν΄μ μ΅μκ°μ μ°Ύκ³ ,
gps_log [i] κ° νμ¬ κ±°μ j μ μΌμΉνμ§ μμΌλ©΄ λ°κΏμ€μΌνλ―λ‘ +1 ν΄μ£Όμλ€.
μ½λ
import java.util.ArrayList;
import java.util.List;
public class GPS {
static int INF = 999999999;
public static int solution(int n, int m, int[][] edge_list, int k, int[] gps_log) {
List<Integer>[] adj = new List[n+1];
int[][] dp = new int[k][n+1];
for(int i = 0 ; i < n+1; i++){
adj[i] = new ArrayList<>();
}
for(int i = 0 ; i < edge_list.length ; i++){
int o = edge_list[i][0];
int t = edge_list[i][1];
adj[o].add(t);
adj[t].add(o);
}
for(int i = 0 ; i < k ; i++){
for(int j = 0 ; j < n+1 ; j++){
dp[i][j] = INF;
}
}
// 맨 μ²μ κ±°μ μ μ ν΄μ Έ μ΄μ
dp[0][gps_log[0]] = 0;
for(int i = 1 ; i < k ; i++){
for(int j = 1 ; j < n+1; j++){
// μ΄λ x
dp[i][j] = Math.min(dp[i][j], dp[i-1][j]);
// μΈμ ν λ
Έλλ‘ μ΄λμ νλ κ²½μ°
for(int next : adj[j]){
dp[i][j] = Math.min(dp[i-1][next], dp[i][j]);
}
// gps_log[i]μ νμ¬ κ±°μ μ΄ μΌμΉνμ§ μμΌλ©΄ λ³κ²½λμμ
if(j != gps_log[i])
dp[i][j]++;
}
}
if(dp[k-1][gps_log[k-1]] < INF)
return dp[k-1][gps_log[k-1]];
return -1;
}
public static void main(String[] args) {
int[][] edge_list = {{1,2} , {1,3}, {2,3}, {2,4}, {3,4}, {3,5}, { 4,6}, {5,6} , {5,7}, {6,7}};
int[] gps_log = {1,2,3,3,6,7};
System.out.println(solution(7, 10, edge_list, 6, gps_log));
}
}