λ¬Έμ
μ°νμ΄λ μ΄λ¦° μμ , μ§κ΅¬ μΈμ λ€λ₯Έ νμ±μμλ μΈλ₯λ€μ΄ μ΄μκ° μ μλ λ―Έλκ° μ€λ¦¬λΌ λ―Ώμλ€. κ·Έλ¦¬κ³ κ·Έκ° μ§κ΅¬λΌλ μΈμμ λ°μ λ΄λ € λμ μ§ 23λ
μ΄ μ§λ μ§κΈ, μΈκ³ μ΅μ°μ ASNA μ°μ£Ό λΉνμ¬κ° λμ΄ μλ‘μ΄ μΈκ³μ λ°μ λ΄λ € λλ μκ΄μ μκ°μ κΈ°λ€λ¦¬κ³ μλ€. κ·Έκ° νμΉνκ² λ μ°μ£Όμ μ Alpha CentauriλΌλ μλ‘μ΄ μΈλ₯μ 보κΈμ리λ₯Ό κ°μ²νκΈ° μν λκ·λͺ¨ μν μ μ§ μμ€ν
μ νμ¬νκ³ μκΈ° λλ¬Έμ, κ·Έ ν¬κΈ°μ μ§λμ΄ μμ²λ μ΄μ λ‘ μ΅μ κΈ°μ λ ₯μ μ΄ λμνμ¬ κ°λ°ν 곡κ°μ΄λ μ₯μΉλ₯Ό νμ¬νμλ€. νμ§λ§ μ΄ κ³΅κ°μ΄λ μ₯μΉλ μ΄λ 거리λ₯Ό κΈκ²©νκ² λ릴 κ²½μ° κΈ°κ³μ μ¬κ°ν κ²°ν¨μ΄ λ°μνλ λ¨μ μ΄ μμ΄μ, μ΄μ μλμκΈ°μ kκ΄λ
μ μ΄λνμμ λλ k-1 , k νΉμ k+1 κ΄λ
λ§μ λ€μ μ΄λν μ μλ€. μλ₯Ό λ€μ΄, μ΄ μ₯μΉλ₯Ό μ²μ μλμν¬ κ²½μ° -1 , 0 , 1 κ΄λ
μ μ΄λ‘ μ μ΄λν μ μμΌλ μ¬μ€μ μμ νΉμ 0 거리λ§νΌμ μ΄λμ μλ―Έκ° μμΌλ―λ‘ 1 κ΄λ
μ μ΄λν μ μμΌλ©°, κ·Έ λ€μμλ 0 , 1 , 2 κ΄λ
μ μ΄λν μ μλ κ²μ΄λ€. ( μ¬κΈ°μ λ€μ 2κ΄λ
μ μ΄λνλ€λ©΄ λ€μ μκΈ°μ 1, 2, 3 κ΄λ
μ μ΄λν μ μλ€. ) κΉμ°νμ 곡κ°μ΄λ μ₯μΉ μλμμ μλμ§ μλͺ¨κ° ν¬λ€λ μ μ μ μκ³ μκΈ° λλ¬Έμ xμ§μ μμ yμ§μ μ ν₯ν΄ μ΅μνμ μλ νμλ‘ μ΄λνλ € νλ€. νμ§λ§ yμ§μ μ λμ°©ν΄μλ κ³΅κ° μ΄λμ₯μΉμ μμ μ±μ μνμ¬ yμ§μ μ λμ°©νκΈ° λ°λ‘ μ§μ μ μ΄λ거리λ λ°λμ 1κ΄λ
μΌλ‘ νλ € νλ€. κΉμ°νμ μν΄ xμ§μ λΆν° μ νν yμ§μ μΌλ‘ μ΄λνλλ° νμν κ³΅κ° μ΄λ μ₯μΉ μλ νμμ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νλΌ.
μ
λ ₯
μ
λ ₯μ 첫 μ€μλ ν
μ€νΈμΌμ΄μ€μ κ°μ Tκ° μ£Όμ΄μ§λ€. κ°κ°μ ν
μ€νΈ μΌμ΄μ€μ λν΄ νμ¬ μμΉ x μ λͺ©ν μμΉ y κ° μ μλ‘ μ£Όμ΄μ§λ©°, xλ νμ yλ³΄λ€ μμ κ°μ κ°λλ€. (0 β€ x < y < 2^31)
μΆλ ₯
κ°Β ν
μ€νΈΒ μΌμ΄μ€μΒ λν΄Β xμ§μ μΌλ‘λΆν°Β yμ§μ κΉμ§Β μ ννΒ λλ¬νλλ°Β νμνΒ μ΅μνμ 곡κ°μ΄λΒ μ₯μΉΒ μλΒ νμλ₯ΌΒ μΆλ ₯νλ€.
μμ
β
μ
λ ₯ 1
β
μΆλ ₯ 1
μμ± μ½λ
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
| public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int count = 0;
if (x == y) {
System.out.println(count);
continue;
}
bfs(x, y);
}
}
private static void bfs(int x, int y) {
int distance = y - x;
boolean[] visited = new boolean[distance + 1];
Deque<int[]> queue = new ArrayDeque<>();
queue.addLast(new int[]{x, 0, 0});
visited[0] = true;
while (!queue.isEmpty()) {
int[] element = queue.pollFirst();
int prev = element[0];
int count = element[1];
int move = element[2];
if (prev == y - 1) {
System.out.println(count + 1);
return;
}
for (int d = move - 1; d <= move + 1; d++) {
if (d <= 0) continue;
int current = prev + d;
if (current < y && !visited[current - x]) {
queue.addLast(new int[]{current, count + 1, d});
visited[current - x] = true;
}
}
}
}
}
|
BFS
λ‘ λ¬Έμ λ₯Ό νμμΌλ, λ©λͺ¨λ¦¬ μ΄κ³Ό λ¬Έμ κ° λ°μνλ€.- νκ³ λλ λ¬Έμ μμ²΄κ° λ©λͺ¨λ¦¬ μΈ‘λ©΄μμ
BFS
μ μ ν©νμ§ μλ€λ κ±Έ μκ² λμλ€.
κ°μ μ½λ
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
| /*
Β Β Β Β 1
Β Β Β Β 11
Β Β Β Β 111
Β Β Β Β 121
Β Β Β Β 1211
Β Β Β Β 1121
Β Β Β Β 1221
Β Β Β Β 12211
Β Β Β Β 11221
Β Β Β Β 12221
Β Β Β Β ...
*/
public class Main {
public static void main(String[] args) throws IOException {
// 1. λ³μ μ μΈ λ° μ΄κΈ°ν
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
// 2. ν
μ€νΈ μΌμ΄μ€ μν
for (int i = 0; i < t; i++) {
// μ§μ λ³μ μ μΈ λ° μ΄κΈ°ν
StringTokenizer st = new StringTokenizer(br.readLine());
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
int distance = y - x;
int move = 1, count = 0, current = 0;
// μ΄λ μ²λ¦¬
while (current < distance) {
if (distance - current <= move) {
count++;
break;
} else if (distance - current < move * 2) {
count += 2;
break;
} else {
count += 2;
current += move++ * 2;
}
}
// μΆλ ₯
System.out.println(count);
}
}
}
|
- κ·μΉμ μ°Ύμμ
Brute-force
λ°©μμΌλ‘ νμλ€.
νκ³
- μκ° λ λ λ λμ λ°©λ²μ΄ μλμ§ μκ°ν΄λ³΄μμΌκ² λ€.