01-08 08:57
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[BAEKJOON] ๋ฐฑ์ค€ BFS 12851 :: ์ˆจ๋ฐ”๊ผญ์งˆ 2 ๋ณธ๋ฌธ

Algorithm/Baekjoon

[BAEKJOON] ๋ฐฑ์ค€ BFS 12851 :: ์ˆจ๋ฐ”๊ผญ์งˆ 2

miinsun 2022. 7. 8. 22:02

๐Ÿ’ฌ  ๋ฌธ์ œ ์„ค๋ช…

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

์ˆ˜๋นˆ์ด์™€ ๋™์ƒ์˜ ์œ„์น˜๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, ์ˆ˜๋นˆ์ด๊ฐ€ ๋™์ƒ์„ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์ด ๋ช‡ ์ดˆ ํ›„์ธ์ง€ ๊ทธ๋ฆฌ๊ณ , ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์œผ๋กœ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด ๋ช‡ ๊ฐ€์ง€ ์ธ์ง€ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 

๐Ÿ”จ  ์ž…์ถœ๋ ฅ ์˜ˆ

์ž…๋ ฅ 

  • ์ฒซ ๋ฒˆ์งธ ์ค„์— ์ˆ˜๋นˆ์ด๊ฐ€ ์žˆ๋Š” ์œ„์น˜ N๊ณผ ๋™์ƒ์ด ์žˆ๋Š” ์œ„์น˜ K๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. N๊ณผ K๋Š” ์ •์ˆ˜์ด๋‹ค.

 

์ถœ๋ ฅ

  • ์ฒซ์งธ ์ค„์— ์ˆ˜๋นˆ์ด๊ฐ€ ๋™์ƒ์„ ์ฐพ๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•œ๋‹ค.
  • ๋‘˜์งธ ์ค„์—๋Š” ๊ฐ€์žฅ ๋น ๋ฅธ ์‹œ๊ฐ„์œผ๋กœ ์ˆ˜๋นˆ์ด๊ฐ€ ๋™์ƒ์„ ์ฐพ๋Š” ๋ฐฉ๋ฒ•์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์˜ˆ์ œ ์ž…๋ ฅ 1)

5 17

 

์˜ˆ์ œ ์ถœ๋ ฅ 1)

4
2

 

โ€‹

๐Ÿ’ป  Main.java

์ˆ˜๋นˆ์ด์˜ ํ˜„์žฌ ์œ„์น˜๊ฐ€ 5์ด๊ณ , ๋™์ƒ์˜ ์œ„์น˜๊ฐ€ 17์ผ ๋•Œ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

n์—์„œ n-1, n+1,n*2 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ป—์–ด๋‚˜๊ฐ„๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. BFS๋ฅผ ์ด์šฉํ•ด ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•ด๋ดค๋‹ค.

4์—์„œ 3, 5,8๋กœ ๋ป—์–ด๊ฐˆ๋Œ€ 5๋Š” ์ด๋ฏธ level1์—์„œ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์— level2์—์„œ 5๋ฅผ ๋ฐฉ๋ฌธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. (์ฆ‰ 5๋Š” 1์ดˆ๋ฉด ๋„๋‹ฌ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— 2์ดˆ์— ๊ฑธ์ณ 5๋ฅผ ๋ฐฉ๋ฌธํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค๋Š” ๋œป) 3์—์„œ 2,4,6์œผ๋กœ ๋ป—์–ด๋‚˜๊ฐˆ ๋•Œ๋„ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ด์œ ๋กœ 4, 6์€ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

/* ๋ฐฑ์ค€ - 12851 :: ์ˆจ๋ฐ”๊ผญ์งˆ 2 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
	
	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[] min = new int[100001]; 
		Queue<Integer> q = new LinkedList<>();
		q.add(n);
		min[n] = 1;
		
		int cnt = 0;
		while(!q.isEmpty()) {
			int cur = q.poll();
			
			// ๋™์ƒ์„ ๋งŒ๋‚˜๋ฉด ์นด์šดํŠธ ์ฆ๊ฐ€
			if(cur == k)
				cnt++;
			
			// ์•ž์œผ๋กœ ํ•œ์นธ ๊ฑธ์–ด๊ฐ€๊ธฐ
			if(cur - 1 >= 0 && cur - 1 <= 100000) {
				if(min[cur - 1] == 0 || min[cur - 1] >= min[cur] + 1) {
					min[cur - 1] = min[cur] + 1;
					q.add(cur - 1);
				}
			}
			
			// ๋’ค๋กœ ํ•œ์นธ ๊ฑธ์–ด๊ฐ€๊ธฐ
			if(cur + 1 >= 0 && cur + 1 <= 100000) {
				if(min[cur + 1] == 0 || min[cur + 1] >= min[cur] + 1) {
					min[cur + 1] = min[cur] + 1;
					q.add(cur + 1);
				}
			}
			
			// ์ˆœ๊ฐ„์ด๋™
			if(cur * 2 >= 0 && cur * 2 <= 100000) {
				if (min[cur * 2] == 0 || min[cur * 2] >= min[cur] + 1) {
					min[cur * 2] = min[cur] + 1;
					q.add(cur * 2);
				}
			}
		}
		
		System.out.println(min[k] - 1);
		System.out.println(cnt);
		br.close();
		
	}
}
Comments