hades

[Baekjoon] 1697๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ ๋ณธ๋ฌธ

๐Ÿ‘Š PS/Algorithm

[Baekjoon] 1697๋ฒˆ: ์ˆจ๋ฐ”๊ผญ์งˆ

hades1 2024. 7. 8. 20:44

๐Ÿฅ… ๋ฌธ์ œ

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

 

๐Ÿ” ์„ค๊ณ„

ํ˜„์žฌ ์œ„์น˜๋ฅผ x๋ผ๊ณ  ํ•  ๋•Œ, ๊ทธ ์œ„์น˜์—์„œ +1, -1, *2์˜ ์œ„์น˜๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ํ์—์„œ ํ˜„์žฌ ์œ„์น˜๋ฅผ ๊บผ๋‚ด ๋งค ์ดˆ๋งˆ๋‹ค ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ์œ„์น˜๋ฅผ ๊ฐฑ์‹ ํ•œ๋‹ค. 

 

ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ํ•˜๋Š”๋ฐ, ์–ด๋–ค ์ดˆ์— ๋†“์—ฌ์ ธ ์žˆ๋Š” ์œ„์น˜๋กœ๋ถ€ํ„ฐ ๋‹ค์Œ ์ดˆ์— ์ด๋™ํ•  ์œ„์น˜ ์–ป์–ด๋‚ด๋Š” ๊ณผ์ •์—์„œ ์ด๋™ํ•˜๊ธฐ ์ „ size๋ฅผ ์ €์žฅํ•˜๊ณ , ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

 

๋‹ค์Œ ์ดˆ์— ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์œ„์น˜์˜ ๋ฒ”์œ„๋ฅผ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

 

์–ด๋–ค ์œ„์น˜์— ์ด๋ฏธ ์ด๋™ํ–ˆ๊ณ , ๊ทธ๋กœ ์ธํ•ด ์ƒˆ๋กœ์šด ์œ„์น˜๋ฅผ ์–ป์–ด๋ƒˆ๋Š”๋ฐ, ๋‚˜์ค‘์— ๋˜ ๋ฐฉ๋ฌธํ•œ๋‹ค๋ฉด ์ค‘๋ณต์ด ์ผ์–ด๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ณผ, ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ์–ด๋–ค ์œ„์น˜์— ์ด๋™ํ•œ ์‹œ๊ฐ์„ visited์— ์ €์žฅํ•˜์—ฌ ์ €์žฅ๋œ ์‹œ๊ฐ๋ณด๋‹ค ๋„์ฐฉํ•œ ์‹œ๊ฐ์ด ํฌ๋‹ค๋ฉด ํ์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

 

๐Ÿ‘Š ํ’€์ด

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
#include <cmath>
using namespace std;	
int n, k, sec=0;
vector<int> visited(100001, 1e9+7);

int main() {
	cin.tie(NULL);
	ios_base::sync_with_stdio(false);
	cin >> n >> k;
	if (n==k){
		cout << 0 << "\n";
		return 0;
	}		
	queue<int> q;
	q.push(n);
	while (!q.empty()){
		sec+=1;
		int size = q.size();
		for (int i=0; i<size; i++){
			int x = q.front();
			q.pop();
			if (x+1 <= 100000){
				if (visited[x+1] > sec){
					visited[x+1] = sec;
					q.push(x+1);
				}
			} 
			if (x-1 >= 0){
				if (visited[x-1] > sec){
					visited[x-1] = sec;
					q.push(x-1);
				}
			} 
			if (x*2 <= 100000){
				if (visited[x*2] > sec){
					visited[x*2] = sec;
					q.push(x*2);
				}
			} 
		}
	}
	cout << visited[k] << "\n";
	return 0;
}