Notice
Recent Posts
Recent Comments
Link
알고리즘 모음(C++)
백준 25418 - 정수 a를 k로 만들기(C++) 본문
문제 링크입니다. 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
![](https://blog.kakaocdn.net/dn/cAr8mW/btsxrWkuxSC/ZIPhE06k3CbdKHsrmPjN10/img.jpg)
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;
}
![](https://blog.kakaocdn.net/dn/cJWAtI/btsxH2qmu6Q/Ico9OnwB355KsvwSL8s0W0/img.jpg)
질문 및 조언은 댓글을 남겨주세요
'백준' 카테고리의 다른 글
백준 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 |