알고리즘 모음(C++)

백준 25418 - 정수 a를 k로 만들기(C++) 본문

백준

백준 25418 - 정수 a를 k로 만들기(C++)

공대생의 잡다한 사전 2023. 10. 8. 22:22

문제 링크입니다. https://www.acmicpc.net/problem/25418

25418번: 정수 a를 k로 만들기

7(A), 8(연산 1), 9(연산 1), 18(연산 2), 19(연산 1), 38(연산 2), 76(연산 2), 77(연산 1)이 최소 연산이므로 정답은 7이다.

www.acmicpc.net


A값을 K로 변환할 때 최소 연산 횟수를 구하는 문제입니다.

변환하는 방법은 +1을 하거나 *2을 할 수 있습니다.

최소 연산 횟수를 구하는 것이기에 BFS를 사용해야 하며, 다른 좌표로 이동하면서 K값으로 도착하면 이동횟수를 출력해주면 됩니다.



자세한 것은 코드를 참고해주세요.

#define _CRT_SECURE_NO_WARNINGS
#include <cstring>
#include <vector>
#include <iostream>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstdio>
#include <string>
#include <deque>

using namespace std;

int N, M;
int check[1000001];

int bfs(){
	queue<pair<int, int>> q;
	q.push({N, 0});
	check[N] = 1;
	while(!q.empty()){
		int x = q.front().first;
		int y = q.front().second;
		q.pop();
		if(x == M) return y;
		int X_1 = x + 1;
		int X_2 = x * 2;
		if(X_1<= 1000000 && check[X_1] == 0){
			check[X_1] = 1;
			q.push({X_1, y+1});
		}
		if(X_2 <= 1000000 && check[X_2] == 0){
			check[X_2] = 1;
			q.push({X_2, y+1});
		}
	}
}

void solve(){
	cout << bfs();
}

int main() {
	cin.tie(0);
	cout.tie(0);
	cin >> N >> M;
	solve();	
	return 0;
}



질문 및 조언은 댓글을 남겨주세요

'백준' 카테고리의 다른 글

백준 10810 - 공 넣기(C++)  (0) 2023.10.13
백준 13903 - 출근(C++)  (0) 2023.10.10
백준 5341 - Pyramids(C++)  (0) 2023.10.08
백준 17025 - Icy Perimeter(C++)  (1) 2023.10.03
백준 27211 - 도넛 행성(C++)  (1) 2023.10.03