๐ ๋ฌธ์
https://www.acmicpc.net/problem/12851
๋ฌธ์
์๋น์ด๋ ๋์๊ณผ ์จ๋ฐ๊ผญ์ง์ ํ๊ณ ์๋ค. ์๋น์ด๋ ํ์ฌ ์ N(0 ≤ N ≤ 100,000)์ ์๊ณ , ๋์์ ์ K(0 ≤ K ≤ 100,000)์ ์๋ค. ์๋น์ด๋ ๊ฑท๊ฑฐ๋ ์๊ฐ์ด๋์ ํ ์ ์๋ค. ๋ง์ฝ, ์๋น์ด์ ์์น๊ฐ X์ผ ๋ ๊ฑท๋๋ค๋ฉด 1์ด ํ์ X-1 ๋๋ X+1๋ก ์ด๋ํ๊ฒ ๋๋ค. ์๊ฐ์ด๋์ ํ๋ ๊ฒฝ์ฐ์๋ 1์ด ํ์ 2*X์ ์์น๋ก ์ด๋ํ๊ฒ ๋๋ค.
์๋น์ด์ ๋์์ ์์น๊ฐ ์ฃผ์ด์ก์ ๋, ์๋น์ด๊ฐ ๋์์ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ด ๋ช ์ด ํ์ธ์ง ๊ทธ๋ฆฌ๊ณ , ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ์ด ๋ช ๊ฐ์ง ์ธ์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ์๋น์ด๊ฐ ์๋ ์์น N๊ณผ ๋์์ด ์๋ ์์น K๊ฐ ์ฃผ์ด์ง๋ค. N๊ณผ K๋ ์ ์์ด๋ค.
์ถ๋ ฅ
์ฒซ์งธ ์ค์ ์๋น์ด๊ฐ ๋์์ ์ฐพ๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
๋์งธ ์ค์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ผ๋ก ์๋น์ด๊ฐ ๋์์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ์๋ฅผ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
์จ๋ฐ๊ผญ์ง1(https://eijun.tistory.com/277) ๋ฌธ์ ์์ ๊ฐ์ ์ด์ ์ด๋ค์ง ์ ํ๋ค์ ๋ค์ ์ด์ ๋ชจ๋ ๋๊ฐ์ด ์ฒ๋ฆฌํด์ผ ํ๋ค๊ณ ๋งํ๋ค. ๊น์ด๋ฅผ ์ ์งํด์ฃผ๋ ๊ฒ์ด๋ค.
์ด๋ฒ ์จ๋ฐ๊ผญ์ง2 ๋ฌธ์ ๋ ์ด ๊ฐ๋ ์ ๋ฐ๋ก ์ฝ๋ํ ์ํจ ๊ฒ์ผ๋ก ์์ฉํ๊ธฐ ๊ทธ๋ค์ง ์ด๋ ต์ง ์๋ค.
โ๏ธ ์ด์ ๋ฌธ์ ๊ฐ ๋์์ ์ฐพ๋ ์๊ฐ ๋ฐ๋ก ํ์์ ๋๋๋ค๋ฉด, ์ด๋ฒ ๋ฌธ์ ๋ ๋์์ ์ฐพ๋ ์๊ฐ ๊ฒฝ์ฐ์ ์๋ฅผ ์นด์ดํ ํด์ค๋ค.
์๋ฅผ ๋ค์ด ์์น 8์ ๋์์ด ์๊ณ , 2์ด๋์ ์๋น์ด๊ฐ ์๋ ์์น๊ฐ 5, 6์ด๋ผ๊ณ ํ์. ์ด๋ ์๋น์ด๊ฐ ์๋์ ๊ฐ์ด ์ ํํด์ ์ด๋ํ๋ค๊ณ ํด๋ณด์.
โป๏ธ ์์น 5์์ ๋ค๋ก ์ด๋ํ๋ค: ์์น 4
โป๏ธ ์์น 6์์ ์์ผ๋ก ์ด๋ํ๋ค: ์์น 7
๊ทธ๋ฆฌ๊ณ 3์ด๋์์ ์๋์ ๊ฐ์ด ์ด๋ํ๋ค๊ณ ํด๋ณด์.
โป๏ธ ์์น 4์์ ์๊ฐ์ด๋ํ๋ค: ์์น 8
โป๏ธ ์์น 7์์ ์์ผ๋ก ์ด๋ํ๋ค: ์์น 8
์ด๋ ์จ๋ฐ๊ผญ์ง1 ๋ฌธ์ ์๋ค๋ฉด, ์์น4์์ ์๊ฐ์ด๋์ ํ์ ๋ ๋์์ ์ฐพ๊ณ ๋ฐ๋ก ํ์์ ๋๋์ ๊ฒ์ด๋ค. "3์ด๋"์ ๋์์ ์ฐพ์๋์ง๋ง ๋ณด๋ฉด ๋๊ธฐ ๋๋ฌธ์, ๋ค์ ๊ณ์ฐ์ ๋ถํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฐพ์์ผ๋ฉด ๋!!!
์ด๋ฒ ๋ฌธ์ ์์๋ ๋์์ ์ฐพ์ ๊ฒฝ์ฐ์ ์๊น์ง ํ์ํ๋ฏ๋ก, ํ์์ ๋๋ด๋ฉด ์๋๋ค.
๊ฐ์ ๊น์ด(์ด)์ ์๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ๋ํด ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธํด๋ณด๊ณ ๊ฒฝ์ฐ์ ์๋ฅผ ์นด์ดํ ํ๋ค.
์ด ๊ฐ์ด 1๋ณด๋ค ํฌ๋ค๋ฉด ๋์์ ์ด๋ป๊ฒ๋ ์ฐพ์ ๊ฒฝ์ฐ์ ์๊ฐ ์กด์ฌํ๋ค๋ ๋ป์ด๋ฏ๋ก, ๊ทธ๋์ ์๊ฐ๊ณผ ๊ฒฝ์ฐ์ ์๋ฅผ ์ถ๋ ฅํ ๋ค์ ์๊ณ ๋ฆฌ์ฆ์ ์ข ๋ฃํ๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(Java)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main_๋ฐฑ์ค_12851_์จ๋ฐ๊ผญ์ง_๊ณจ๋5 {
static int N, K, MAX=100000;
static boolean[] visited;
static Queue<Integer> queue;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());//์๋น์ด ์์น
K = Integer.parseInt(st.nextToken());//๋์ ์์น
visited = new boolean[MAX+1];
queue = new LinkedList<Integer>();
queue.offer(N);
int time = 0;
while(true) {
int cnt = bfs();
if(cnt>0) {
System.out.println(time);
System.out.println(cnt);
break;
}
time++;
}
}//end of main
private static int bfs() {
int cnt = 0;
int size=queue.size();
for (int i = 0; i < size; i++) {//์ด์ ์ด์ ์ด๋ํ ๋ชจ๋ ๊ฒฝ์ฐ ํ์
int cur = queue.poll();
visited[cur]=true;
if(cur==K) {
cnt++;//๊ฒฝ์ฐ์์ ์นด์ดํธ
continue;
}
if(cur*2 <= MAX && !visited[cur*2]) queue.offer(cur*2);
if(cur+1 <= MAX && !visited[cur+1]) queue.offer(cur+1);
if(cur-1 >= 0 && !visited[cur-1]) queue.offer(cur-1);
}
return cnt;
}
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ