๋ฌธ์
https://www.acmicpc.net/problem/13913
๋ด ๋ฌธ์ ํ์ด
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Stack;
import java.util.StringTokenizer;
public class Main {
static Deque<int[]> que;
static boolean[] visited = new boolean[100_001];
static int[] parent = new int[100_001];
static int n, k;
public static int[] bfs() {
while(!que.isEmpty()) {
int[] now = que.removeFirst();
int x = now[0];
int sec = now[1];
int[] cal = {x+1, x-1, x*2};
for(int i = 0; i < 3; i++) {
if(cal[i] == k) {
visited[cal[i]] = true;
parent[cal[i]] = x;
return new int[]{cal[i], sec+1};
}
if(cal[i] < 0 || cal[i] >= visited.length || visited[cal[i]]) continue;
que.add(new int[]{cal[i], sec+1});
visited[cal[i]] = true;
parent[cal[i]] = x; // ์ด์ ์ ์ด๋์ ์ด์ด์ง๊ฑด์ง ๊ธฐ๋กํด๋๊ธฐ
}
}
return new int[]{};
}
public static void main(String[] args) throws Exception {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder out = new StringBuilder();
st = new StringTokenizer(in.readLine());
n = Integer.parseInt(st.nextToken());
k = Integer.parseInt(st.nextToken());
if(n == k) {
System.out.println(0 + "\n" + n);
}
else {
visited[n] = true;
parent[n] = n;
que = new ArrayDeque<>();
que.add(new int[]{n, 0});
// ๊ฑฐ๊พธ๋ก ํ์ํ๋ฉด์ ์ด์ด์ง ๋
ธ๋๋ค stack์ ๋ฃ์๋ค๊ฐ ๋ค์ ๋นผ๋ฉด์ ์ถ๋ ฅ
Stack<Integer> stack = new Stack<>();
int[] result = bfs();
int idx = result[0];
while(idx != n) {
stack.push(parent[idx]);
idx = parent[idx];
}
out.append(result[1] + "\n");
while(!stack.isEmpty()) {
out.append(stack.pop() + " ");
}
System.out.println(out.append(result[0]));
}
}
}
๐ BFS ๋ฌธ์
์ด ๋ฌธ์ ๋ ๋ฐ์ ๊ฐ๋ฅํ ์๊ฐ ์ด๊ณผ, ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ, ์์ธ๋ค์ ์ ์๊ฐํด์ฃผ์ด์ผ ํ๋ ๊ฒ ๊ฐ์
- ์์์ ๊ณผ ๋์ฐฉ์ ์ด ๊ฐ์ ๊ฒฝ์ฐ ๋ฐ๋ก ๋นผ์ ์ฒ๋ฆฌํด์ฃผ์๋ค.
- visited๋ ๋จ์ํ ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ๋ฅผ ํ๋ ๋ฐฐ์ด์ด๋ฉฐ,
parent๋ ํ์ฌ ์ธ๋ฑ์ค์ ์ค๊ธฐ ์ ์ ๋ฐฉ๋ฌธํ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด์ด๋ค.
(์๋๋ ์ด ๋ ๋ฐฐ์ด์ ํ๋๋ก ๋ฌถ๊ณ , intํ์ผ๋ก ๋ง๋ค์ด ์ฌ์ฉํ์ง๋ง
๊ทธ๋ ๊ฒ ํ๋ฉด ์์์ ์ด 0์ผ ๊ฒฝ์ฐ ์์ธ๊ฐ ๋ฐ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.) - bfs ๋ฉ์๋๋ int[]ํ์ ๋ฐํํ๋๋ก ํ์ฌ์ {๋์ฐฉ ์ธ๋ฑ์ค, ๊ฑธ๋ฆฐ ์๊ฐ}์ ํจ๊ป ๊ฐ์ ธ์๋ค.
- bfs ๋ฉ์๋์ ๊ฒฝ์ฐ ์์ฃผ ๊ฐ๋จํ๋ฐ, ํ๋ ์ฒดํฌํ ์ ์
parent์ ์ด์ ์ ๋ค๋ฆฐ ์ธ๋ฑ์ค ์ ๋ณด๋ฅผ ๊ผญ ๋ฃ์ด์ค ๊ฒ,,!! - bfs ๋ฉ์๋๊ฐ ๋ฐํ๋๋ฉด ์คํ์ ๋์ฐฉ์ง์ ๋ถํฐ ๊ฑฐ๊พธ๋ก ๊ฒฝ๋ก๋ฅผ ๋ฃ์ด์ค ํ,
๋ค์ popํ๋ฉด์ ์ฒ์ ์์ ์ง์ ๋ถํฐ ์ฐจ๋ก๋๋ก ์ถ๋ ฅํ ์ ์๊ฒ ํ๋ค.
๐ก ํผ๋๋ฐฑ
- ์จ๋ฐ๊ผญ์ง3 ๋ฌธ์ ์ ๋งค์ฐ ์ ์ฌํ์ง๋ง, ์ฌ๋ฌ ๊ฐ์ง ์์ธ๋ฅผ ์ ์ฒดํฌํด์ค์ผ ํ๋ ๋ฌธ์ ์๋ค.
- ์ฒ์์ ์ฝ๋ค~~ ํ๋ค๊ฐ,, ์ ๋ต๋ฅ ๋ฎ์ ์ด์ ๋ฅผ ์์๋ฒ๋ ธ๋ค.ใ ใ
'2๏ธโฃ Java > Problem Solving' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Java Algorithm] ํ ํ๋ก์ ํธ BOJ #9466 (0) | 2022.08.09 |
---|---|
[Java Algorithm] ํธ๋ฆฌ BOJ #4803 (0) | 2022.08.09 |
[Java Algorithm] ๋ถ BOJ #5427 (0) | 2022.08.08 |
[Java Algorithm] ์จ๋ฐ๊ผญ์ง 3 BOJ #13549 (0) | 2022.08.08 |
[Java Algorithm] ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ BOJ #2206 (0) | 2022.08.08 |
๋๊ธ