https://www.acmicpc.net/problem/1463
1463번: 1로 만들기
첫째 줄에 1보다 크거나 같고, 106보다 작거나 같은 정수 N이 주어진다.
www.acmicpc.net
이 문제는 BFS를 사용해서 해결할 수 있다.
현재 queue에 있는 값이 1이면 연산 횟수를 저장하고 반복을 멈춘다.
값이 3으로 나눠 떨어지거나 2로 나눠 떨어지면 queue에 값을 3이나 2로 나누고 연산 횟수를 저장한다.
또한 값을 1로 뺀 값과 연산 횟수를 저장한다.
#include <iostream>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
int x, result;
queue<pair<int,int>> q;
void bfs() {
q.push(make_pair(x,0));
while (!q.empty()) {
int value = q.front().first;
int counter = q.front().second;
q.pop();
if (value == 1) {
result = counter;
break;
}
if (value % 3 == 0) q.push(make_pair(value/3, counter + 1));
if (value % 2 == 0) q.push(make_pair(value / 2, counter + 1));
q.push(make_pair(value - 1, counter + 1));
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> x;
bfs();
cout << result << '\n';
}'Baekjoon Review' 카테고리의 다른 글
| [Silver 1] 14940번 쉬운 최단거리 (1) | 2023.11.03 |
|---|---|
| [Gold 5] 16928번 뱀과 사다리 게임 (0) | 2023.11.02 |
| [Silver 1] 2178번 미로 탐색 (0) | 2023.11.02 |
| [Silver 1] 2667번 단지번호붙이기 (0) | 2023.11.02 |
| [Silver 2] 16953번 A -> B (0) | 2023.11.01 |