๐ ๋ฌธ์
https://www.acmicpc.net/problem/1697
๋ฌธ์
์๋น์ด๋ ๋์๊ณผ ์จ๋ฐ๊ผญ์ง์ ํ๊ณ ์๋ค. ์๋น์ด๋ ํ์ฌ ์ N(0 ≤ N ≤ 100,000)์ ์๊ณ , ๋์์ ์ K(0 ≤ K ≤ 100,000)์ ์๋ค. ์๋น์ด๋ ๊ฑท๊ฑฐ๋ ์๊ฐ์ด๋์ ํ ์ ์๋ค. ๋ง์ฝ, ์๋น์ด์ ์์น๊ฐ X์ผ ๋ ๊ฑท๋๋ค๋ฉด 1์ด ํ์ X-1 ๋๋ X+1๋ก ์ด๋ํ๊ฒ ๋๋ค. ์๊ฐ์ด๋์ ํ๋ ๊ฒฝ์ฐ์๋ 1์ด ํ์ 2*X์ ์์น๋ก ์ด๋ํ๊ฒ ๋๋ค.
์๋น์ด์ ๋์์ ์์น๊ฐ ์ฃผ์ด์ก์ ๋, ์๋น์ด๊ฐ ๋์์ ์ฐพ์ ์ ์๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ด ๋ช ์ด ํ์ธ์ง ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ ๋ฒ์งธ ์ค์ ์๋น์ด๊ฐ ์๋ ์์น N๊ณผ ๋์์ด ์๋ ์์น K๊ฐ ์ฃผ์ด์ง๋ค. N๊ณผ K๋ ์ ์์ด๋ค.
์ถ๋ ฅ
์๋น์ด๊ฐ ๋์์ ์ฐพ๋ ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํ๋ค.
โ๏ธ ํ์ด
๐ก ๊ฐ์ฅ ๋น ๋ฅธ ์๊ฐ์ ์ถ๋ ฅํด์ผ ํ๋ฏ๋ก, ์ด์ ์ ๋ฐฉ๋ฌธํ ์์น๋ ๋ค์ ๋ณผ ํ์๊ฐ ์๋ค. ๋ฐฉ๋ฌธ์ฒ๋ฆฌ ๋ฐฐ์ด์ด ํ์ํ๋ค.
๐ก ํ ์ด์ ์๋น์ด๋ ๊ฑธ์ด์ ์์ผ๋ก ์ด๋ํ๊ฑฐ๋/ ๊ฑธ์ด์ ๋ค๋ก ์ด๋ํ๊ฑฐ๋/ ์๊ฐ์ด๋์ ํ๊ฑฐ๋, ์ธ ๊ฐ์ง์ ์ ํ์ ํ ์ ์๋ค. ๋ฐ๋ผ์ ์ด๋ป๊ฒ ์ด๋ํ๋ ์ด์ ์ ํ ์ ํ์ด ๊ฐ์ ๊น์ด(์ด)๋ก ์ฒ๋ฆฌ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์, ๋งค ๋ฃจํ๋ง๋ค ํ์ ๋จ์์๋ ์ด๋๊ฐ์ ๋ชจ๋ ๋นผ์ ์ฒ๋ฆฌํด์ค์ผํ๋ค. ๋ชจ๋ ๊ฐ์ ์๊ฐ๋์ ์ด๋ํ ๊ฒฝ์ฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์๋ฅผ ๋ค์๋ฉด ์๋์ ๊ฐ๋ค.
โ๏ธ 0์ด์ ์๋น์ด(ํ์ฌ์์น 5)๋ ์(6), ๋ค(4), ์๊ฐ์ด๋(10) ์ธ ๊ฐ๋ฅผ ๋ชจ๋ ํ๋ค. ์ด๋ ์ด๋์์น๋ฅผ ์ ์ฅํ ํ ์ฌ์ด์ฆ๋ 3์ด ๋๋ค.
6 | 4 | 10 |
โ๏ธ 1์ด์ ์๋น์ด๋ ํ ์ฌ์ด์ฆ 3๋งํผ ์ด๋๊ฐ์ ๋นผ์ ์ฒ๋ฆฌํ ๊ฒ์ด๋ค.
์์น6์์ ์(7), ์๊ฐ์ด๋(12)๋ฅผ ํ๊ณ , ์์น 4์์ ๋ค(3), ์๊ฐ์ด๋(8)์ ํ๊ณ , ์์น 12์์ ์(13), ๋ค(11), ์๊ฐ์ด๋(24)์ ํ๊ณ ๋๋ฉด ํ์ ์ํ๋ ์๋์ ๊ฐ์์ง๋ค.
7 | 12 | 3 | 8 | 13 | 11 | 24 |
โ๏ธ2์ด์๋ ํ ์ฌ์ด์ฆ 7๋งํผ ์ด๋๊ฐ์ ๋นผ์ ์ฒ๋ฆฌํ๊ฒ ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ๊ณ์ํด์ ๋ฐ๋ณตํ๋ค.
๐ป ์์ค์ฝ๋: ์๋ฐ(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_๋ฐฑ์ค_1697_์จ๋ฐ๊ผญ์ง_์ค๋ฒ1 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());//์๋น์ด ์์น
int K = Integer.parseInt(st.nextToken());//๋์ ์์น
int max = 100000;
boolean[] visited = new boolean[max+1];
Queue<Integer> queue = new LinkedList<Integer>();
queue.offer(N);
int time=0;
ex: while(true) {
int size=queue.size();
for (int i = 0; i < size; i++) {//์ด์ ํ์์ ์ด๋ํ ๊ฒฝ์ฐ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ๋ค.
int cur = queue.poll();
visited[cur]=true;
if(cur==K) break ex;
if(cur*2 <= max && !visited[cur*2]) queue.offer(cur*2);
if(cur-1 >= 0 && !visited[cur-1]) queue.offer(cur-1);
if(cur+1 <= max && !visited[cur+1]) queue.offer(cur+1);
}
time++;
}
System.out.println(time);
}//end of main
}//end of class
๐ ๐ ๐
๏ผฐ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ ๏ผข๏ฝ ๏ผณ๏ผก๏ผน
๐๐ฉ๐ข๐ฏ๐ฌ๐ด ๐ง๐ฐ๐ณ ๐ณ๐ฆ๐ข๐ฅ๐ช๐ฏ๐จ