๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[๋ฐฑ์ค€ ์Šคํ„ฐ๋”” 1์ฃผ์ฐจ] 12851๋ฒˆ ์ˆจ๋ฐ”๊ผญ์งˆ2 ๊ณจ๋“œ5 - ์ž๋ฐ”(JAVA) / BFS

๐Ÿ“‘ ๋ฌธ์ œ

https://www.acmicpc.net/problem/12851

 

12851๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ 2

์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  N(0 ≤ N ≤ 100,000)์— ์žˆ๊ณ , ๋™์ƒ์€ ์  K(0 ≤ K ≤ 100,000)์— ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ๊ฑท๊ฑฐ๋‚˜ ์ˆœ๊ฐ„์ด๋™์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ, ์ˆ˜๋นˆ์ด์˜ ์œ„์น˜๊ฐ€ X์ผ ๋•Œ

www.acmicpc.net

๋”๋ณด๊ธฐ

๋ฌธ์ œ

์ˆ˜๋นˆ์ด๋Š” ๋™์ƒ๊ณผ ์ˆจ๋ฐ”๊ผญ์งˆ์„ ํ•˜๊ณ  ์žˆ๋‹ค. ์ˆ˜๋นˆ์ด๋Š” ํ˜„์žฌ ์  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

 

 

 

 

 

 

 

 

๐Ÿ’Ž ๐Ÿ’Ž ๐Ÿ’Ž

 

 

๏ผฐ๏ฝ๏ฝ“๏ฝ”๏ฝ…๏ฝ„ ๏ผข๏ฝ™ ๏ผณ๏ผก๏ผน

๐˜›๐˜ฉ๐˜ข๐˜ฏ๐˜ฌ๐˜ด ๐˜ง๐˜ฐ๐˜ณ ๐˜ณ๐˜ฆ๐˜ข๐˜ฅ๐˜ช๐˜ฏ๐˜จ