๋ฌธ์ (์ถ์ฒ: https://www.acmicpc.net/problem/12852)
< 1๋ก ๋ง๋ค๊ธฐ 2 >
๋ฌธ์ ํ์ด
์ ๋ ฅ ๋ฒ์์ธ 1000000๋งํผ์ ๋ฐฐ์ด์ ๋ง๋ค์ด N์ 1๋ก ๋ง๋๋ ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ๋ค.
๋ง์ฝ 5์์ 1์ ๋นผ๋ ์ฐ์ฐ์ ํ๋ค๋ฉด 4์ด๋ฏ๋ก arr [4] = 5์ ๊ฐ์ด ์ ์ ๊ฐ์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
my solution (Java)
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class _12852_ { // 1๋ก ๋ง๋ค๊ธฐ 2
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(bf.readLine());
int arr[] = new int[1000001];
Queue<int[]> queue = new LinkedList<>();
if (n != 1) {
queue.add(new int[] { n, 0 });
}
while (!queue.isEmpty()) {
int num[] = queue.poll();
if (num[0] % 3 == 0 && arr[num[0] / 3] == 0) {
queue.add(new int[] { num[0] / 3, num[1] + 1 });
arr[num[0] / 3] = num[0];
if (num[0] / 3 == 1) {
bw.write((num[1] + 1) + "\n");
break;
}
}
if (num[0] % 2 == 0 && arr[num[0] / 2] == 0) {
queue.add(new int[] { num[0] / 2, num[1] + 1 });
arr[num[0] / 2] = num[0];
if (num[0] / 2 == 1) {
bw.write((num[1] + 1) + "\n");
break;
}
}
if (arr[num[0] - 1] == 0) {
queue.add(new int[] { num[0] - 1, num[1] + 1 });
arr[num[0] - 1] = num[0];
if (num[0] - 1 == 1) {
bw.write((num[1] + 1) + "\n");
break;
}
}
}
if (n == 1)
bw.write("0\n");
ArrayList<Integer> result = new ArrayList<>();
int idx = 1;
while (true) {
result.add(idx);
if (idx == n) {
break;
}
idx = arr[idx];
}
for (int i = result.size() - 1; i >= 0; i--) {
bw.write(result.get(i) + " ");
}
bw.flush();
}
}
Main
๋ณ์)
n : ์ ๋ ฅ ๊ฐ ์ ์
arr : ์ฐ์ฐ ๊ฒฝ๋ก ์ ์ฅ
queue : [์ฐ์ฐ ๊ฐ, ์ฐ์ฐ ํ์]
num : queue์์ ๋ฝ์๋ธ ๊ฐ
result : ๋ต ์ ์ฅํ๋ ๋ฆฌ์คํธ
- ์ ๋ ฅ ๊ฐ ์ ์(n) ์ ๋ ฅ
- queue์ ์์ ๊ฐ์ธ n๊ณผ ์ฐ์ฐ ํ์ ์ ์ฅ
- queue๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณต
1) 3์ผ๋ก ๋๋์ด ๋จ์ด์ง๋ฉฐ 3์ผ๋ก ๋๋ ๊ฐ์ ์์ง ๋ฐฉ๋ฌธํ ์ ์ด ์์ผ๋ฉด
: queue์ ์ ์ฅ
: arr [์ ์/3] = ์ ์
2) 2๋ก ๋๋์ด ๋จ์ด์ง๋ฉฐ 2๋ก ๋๋ ๊ฐ์ ์์ง ๋ฐฉ๋ฌธํ ์ ์ด ์์ผ๋ฉด
: queue์ ์ ์ฅ
: arr [์ ์/2] = ์ ์
3) 1๋ก ๋บ ๊ฐ์ ์์ง ๋ฐฉ๋ฌธํ ์ ์ด ์์ผ๋ฉด
: queue์ ์ ์ฅ
: arr [์ ์-1] = ์ ์
๊ฐ ์ฐ์ฐ์ ์ํํ ํ ๊ฐ์ด 1์ด๋ฉด ์ฐ์ฐ ํ์ ์ถ๋ ฅ ํ ๋ฐ๋ก ์ข ๋ฃ
- ์ ๋ ฅ ๊ฐ์ด 1์ด๋ผ๋ฉด ์์ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ณ ๋ฐ๋ก ์ฐ์ฐ ํ์ 0 ์ถ๋ ฅ
- n์ 1๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ํฌํจ๋์ด ์๋ ์๋ฅผ ์ถ๋ ฅํ๊ธฐ ์ํด ๋จผ์ ์ญ์์ผ๋ก ArrayList์ ์ ์ฅ
ex) 2 -> 1์ด๋ผ๋ฉด ArrayList์๋ 1 -> 2๋ก ์ ์ฅ๋จ
- ๋ต์ ์ถ๋ ฅํ๊ธฐ ์ํด ArrayList๋ฅผ ๊ฑฐ๊พธ๋ก ์ถ๋ ฅ
'๐Algorithm > ๐ฅBaekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Baekjoon] 18404_ํ๋ช ํ ๋์ดํธ (0) | 2023.07.28 |
---|---|
[Baekjoon] 25418_์ ์ a๋ฅผ k๋ก ๋ง๋ค๊ธฐ (0) | 2023.07.27 |
[Baekjoon] 21773_๊ฐํฌ์ ํ๋ก์ธ์ค 1 (0) | 2023.07.24 |
[Baekjoon] 21939_๋ฌธ์ ์ถ์ฒ ์์คํ Version 1 (0) | 2023.07.24 |
[Baekjoon] 22252_์ ๋ณด ์์ธ ํธ์ (0) | 2023.07.21 |