https://www.acmicpc.net/problem/1697
1. ๋ฌธ์ ์์ฝ
์ N๊ณผ ์ K๊ฐ ์ฃผ์ด์ง๋ค. N์์ K๋ก ๊ฐ ์ ์๋ ์ต๋จ์๊ฐ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์ N์ 1์ด๋ง๋ค +1, -1, *2 ์์น๋ก ์ด๋ํ ์ ์๋ค.
(0 ≤ N, K ≤ 100,000)
2. ํ์ด
์ด ๋ฌธ์ ๋ BFS์ ๊น์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
์์ 5 17์ ๊ธฐ์ค์ผ๋ก, ์ฒ์์๋ '๊น์ด'๋ฅผ ์ด๋ป๊ฒ ๊ตฌํ ๊น ์๊ฐํ๋ฉด์ 5์์ 17๊น์ง ๊ฐ๋ ๋ง์ ๊ฒฝ๋ก ์ค ๊ฐ์ฅ ์งง์ ๊น์ด๋ฅผ ์ถ๋ ฅํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํ๋ค. ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ๋ชจ๋ ๊ฒฝ๋ก๋ฅผ ํ๋ํ๋ ํ์ ํ ๋น๊ตํด์ผํ๋ฏ๋ก ๋นํจ์จ์ ์ด์๋ค.
๋ค์์ผ๋ก ์๊ฐํ ๋ฐฉ๋ฒ์ BFS๋ฅผ ์ฌ์ฉํ๋๋ฐ, ํ์ ๊น์ด๋ ๊ฐ์ด ์ ์ฅํ์๋ค.
17์ด ์๋ ๊น์ด๋ฅผ ์ถ๋ ฅํด์ฃผ๊ณ returnํ๋ ๋ฐฉ๋ฒ์ด๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค.
'ํ ๋งํ ' ๋ฌธ์ ์ ๋น์ทํ ๋๋์ด์๋ค. ์ต๋ ๋ ์ง๋ฅผ ์ฒดํฌํ๊ธฐ ์ํด ๊น์ด๋ฅผ ํ์ ๊ฐ์ด ์ ์ฅํ๋ค.
์ผ์, ์๊ฐ ๋ฑ๋ฑ์ ์ฒดํฌํด์ค ๋๋ ํ์ ๊น์ด๋ ๊ฐ์ด ๋๊ฒจ์ฃผ์.
์ ํ์ ์ธ BFS ํ์ ์ฌ์ฉํ์๊ณ , ๋ธํ๋ฅผ ๋ง๋ค์ด ๋ค์ ์์น๊ฐ +1, -1, *2 ์ธ ๊ฐ๊ฐ์ ์ขํ๋ฅผ ํ์ ๋ฃ์ด์คฌ๋ค.
๊ทธ๋ฐ๋ฐ ์ ์ถํ๋ฉด ๊ณ์ ํ๋ ธ๋ค๊ณ ๋์๋ค. ๋ด๊ฐ ๋์น ๋ถ๋ถ์ 2๊ฐ์ง์๋ค.
1. N์ด K๋ณด๋ค ํฐ ์์น์ ์๋ ๊ฒฝ์ฐ
- N > K์ผ ๋ K๋ก ๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ -1์ ์ฐ๋ ๊ฒ ๋ฐ์ ์๋ค. ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ์๋ ์กฐ๊ฑด์ ๋ฐ๋ก ์ค์ผ ํ๋ค.
- N > K ๋ผ๋ฉด, N - K๋ฒ -1ํด์ฃผ๋ฉด ๋๋ฏ๋ก N-K๋ฅผ ์ถ๋ ฅํด์คฌ๋ค.
2. ๊น์ด๊ฐ 0๋ถํฐ ์์ํ์ง๋ง ์๊ฐ์ 1์ด๋ถํฐ ์์ํ๋ค. ๊ทธ๋์ ๊น์ด + 1์ ํด์ค์ผ ํ๋๋ฐ, ์ด๊ฒ์ main์์ ๊ณตํต์ผ๋ก ์ถ๋ ฅํ๋ ๋ถ๋ถ์์ ํด์ค๊ฒ ๋ฌธ์ ์๋ค. BFS ๋ด์์ return ํ๊ธฐ ๋ฐ๋ก ์ ๊น์ด๋ฅผ ๋ณ์์ ๋ด๊ณ +1์ ํด์ค์ ํด๊ฒฐํ๋ค.
-> ๋ธํ๋ฅผ ์ฌ์ฉํ๊ณ ๊น์ด๋ฅผ ํ์ ๊ฐ์ด ์ ์ฅํ๋ฉด์ BFS๋ฅผ ์ฌ์ฉํ์๋ค.
3. ๋ฌธ์ ์
4. ์ฝ๋
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.StringTokenizer;
public class BOJ_1697_์จ๋ฐ๊ผญ์ง2 {
static int[] dir = {1, -1, 2};
static int[] map;
static int N, sister, ans, min;
static boolean[] visited;
static Queue<Node> queue = new ArrayDeque<> ();
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());
sister = Integer.parseInt(st.nextToken());
map = new int[100_000+1];
visited = new boolean[100_000+1];
if (N >= sister) ans = N - sister; //N >= sister ๊ฒฝ์ฐ ๊ฐ ์ ์๋ ๋ฐฉ๋ฒ์ -1๋ฐ์ ์๋ค
else bfs(N);
System.out.println(ans);
}
static void bfs(int start) {
queue.add(new Node(start, 0));
visited[start] = true;
while (!queue.isEmpty()) {
Node node = queue.poll();
int next = 0;
for (int d = 0; d < 3; d++) { //๋ธํ ์ฌ์ฉ
if (d == 2) next = node.x * 2;
else next = node.x + dir[d];
if (next < 0 || next > 100000 || visited[next]) continue;
if (next == sister) {
ans = node.depth + 1; //์ฌ๊ธฐ์ +1 (์ด๋ 1์ด๋ถํฐ, ๊น์ด๋ 0๋ถํฐ ์์ํ๋ฏ๋ก)
return;
}
visited[next] = true;
queue.add(new Node(next, node.depth+1)); //ํ์ ๊น์ด+1์ ์ ์ฅ
}
}
}
static class Node {
int x, depth;
public Node(int x, int depth) { //์๊ฐ == ๊น์ด
this.x = x;
this.depth = depth;
}
}
}
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 15686 ์นํจ๋ฐฐ๋ฌ [Java] (0) | 2022.08.29 |
---|---|
[BOJ] 16637 ๊ดํธ์ถ๊ฐํ๊ธฐ [Java] (0) | 2022.08.28 |
[BOJ] 2606 ๋ฐ์ด๋ฌ์ค [Java] (0) | 2022.08.25 |
[BOJ] 1759 ์ํธ ๋ง๋ค๊ธฐ [Java] (0) | 2022.08.24 |
[BOJ] 10026 ์ ๋ก์์ฝ [Java] (0) | 2022.08.24 |