λ¬Έμ
λ¬Έμ λ§ν¬ https://www.acmicpc.net/problem/1697
- μλΉμ΄λ λμκ³Ό μ¨λ°κΌμ§μ νκ³ μλ€. μλΉμ΄λ νμ¬ μ N(0 ≤ N ≤ 100,000)μ μκ³ , λμμ μ K(0 ≤ K ≤ 100,000)μ μλ€.
- μλΉμ΄λ κ±·κ±°λ μκ°μ΄λμ ν μ μλ€. λ§μ½, μλΉμ΄μ μμΉκ° XμΌ λ κ±·λλ€λ©΄ 1μ΄ νμ X-1 λλ X+1λ‘ μ΄λνκ² λλ€. μκ°μ΄λμ νλ κ²½μ°μλ 1μ΄ νμ 2*Xμ μμΉλ‘ μ΄λνκ² λλ€.
- μλΉμ΄μ λμμ μμΉκ° μ£Όμ΄μ‘μ λ, μλΉμ΄κ° λμμ μ°Ύμ μ μλ κ°μ₯ λΉ λ₯Έ μκ°μ΄ λͺ μ΄ νμΈμ§ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
- 첫 λ²μ§Έ μ€μ μλΉμ΄κ° μλ μμΉ Nκ³Ό λμμ΄ μλ μμΉ Kκ° μ£Όμ΄μ§λ€. Nκ³Ό Kλ μ μμ΄λ€.
- μλΉμ΄κ° λμμ μ°Ύλ κ°μ₯ λΉ λ₯Έ μκ°μ μΆλ ₯νλ€.
μμ΄λμ΄
- μ΅μ μκ°μ ꡬνλ κ²μ΄λ―λ‘ μ΅λ¨ 거리λ₯Ό ꡬν λ μ°λ BFSλ₯Ό μΌλ€.
- BFSλ₯Ό μ¨μ Queueμ λ€μ΄μλ κ°μ λΉΌλ΄μ ν΄λΉ κ°μ κΈ°μ€ μ’νλ‘ λκ³ μ΄λ κ°λ₯ν μ’νκ° λ°©λ¬Ένμ§ μμκ³ λ²μλ₯Ό λμ΄κ°μ§ μλλ€λ©΄ κΈ°μ€ μ’ν μκ°μ 1μ λν κ°μ ν΄λΉ μ’ν μκ° λ°°μ΄μ μ μ₯νλ€.
- κ·Έλ¦¬κ³ λ°©λ¬Έ μ²λ¦¬ ν, κ·Έ μ’νκ°μ Queueμ μ μ₯νλ€.
- λ§μ½ Queueμμ κΊΌλΈκ°μ΄ λͺ©μ μ’νμ κ°λ€λ©΄ μ’ λ£νλ€.
κ²ͺμ μνμ°©μ€
- μ²μμ DPλΌκ³ μκ°νκ³ νλ €κ³ ν΄λ΄€λλ° DPλ₯Ό νΈλ λ°©μμΈ λΆλΆ λ¬Έμ κ²°κ³Όκ°μΌλ‘ μΆλ‘ μ ν μκ° μλ€κ³ νλ¨μ΄ λμλ€.
- κ·Έλμ μ΄μ νμλ μ΅λ¨ 거리λ₯Ό ꡬν λλ BFSλ₯Ό μ°λκΉ μ΅μ μκ°λ λΉμ·νμ§ μμκΉ ν΄μ BFSλ‘ νμλ€
- κ·Έλ¦¬κ³ ArrayIndex μλ¬κ° λ¬λλ°.... λ²μλ₯Ό μ€μλ‘ μλͺ»μ§μ ν΄μ νλ Έμλ€ γ γ (μ€μ μ‘°μ¬...!)
μ½λ
import java.io.*;
import java.util.*;
public class BOJ1697 {
static int N;
static int K;
static int time[];
static boolean visited[];
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// μλΉμ΄κ° μλ μμΉ
N = Integer.parseInt(st.nextToken());
// λμμ΄ μλ μμΉ
K = Integer.parseInt(st.nextToken());
// 걸리λ μκ°μ μ μ₯ν λ°°μ΄
time = new int[100001];
// λ°©λ¬Έ μ¬λΆ 체ν¬
visited = new boolean[100001];
BFS(N, K);
System.out.println(time[K]);
}
public static void BFS(int x, int y){
Queue<Integer> q = new LinkedList<>();
q.offer(x);
// μμ μ§μ μ λ°©λ¬Έ μ²λ¦¬
visited[x] = true;
// μμμ§μ μμ μμμ§μ κΉμ§ 걸리λ μκ°μ 0μ΄λ―λ‘ 0μΌλ‘ μ΄κΈ°ν
time[x] = 0;
// Queueκ° λΉλκΉμ§ λ°λ³΅
while(!q.isEmpty()){
int n = q.poll();
// νμ¬ μμΉμ λμ°© μμΉκ° κ°λ€λ©΄ λ°λ³΅λ¬Έ μ’
λ£
if(n == y){
break;
}
// μ΄λν μ’νλ₯Ό μ μ₯ν λ°°μ΄
int move[] = {n - 1, n + 1, n * 2};
// μ΄λν μ’νλ€ μ¦
for(int i : move){
// λ²μλ₯Ό λμ΄κ°λ©΄ continue
if(i < 0 || i > 100000){
continue;
}
// λ°©λ¬Ένμ§ μμ μ’νκ° μλ€λ©΄
if(!visited[i]){
// ν΄λΉ μ’νμ μκ°μ κΈ°μ€ μκ° + 1λ‘ μ μ₯νκ³
time[i] = time[n] + 1;
// λ°©λ¬Έ μ²λ¦¬ ν
visited[i] = true;
// Queueμ λ£μ
q.offer(i);
}
}
}
}
}
'μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] BOJ 2178 λ―Έλ‘νμ (2) | 2024.08.22 |
---|---|
[Java] BOJ 1931 νμμ€ λ°°μ (0) | 2024.08.21 |
[Java] BOJ 1389 μΌλΉ λ² μ΄μ»¨μ 6λ¨κ³ λ²μΉ (0) | 2024.08.19 |
[Java] BOJ 1074 Z (0) | 2024.08.18 |
[Java] BOJ 30804 κ³ΌμΌ νν루 (2) | 2024.08.17 |