(BoJ) 16953 A → B C++

개요

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

Silver 2 검색 질문입니다.

설명하다

두 가지 옵션이 있습니다.

2를 곱하고 맨 오른쪽에 1을 더합니다.

어떤 옵션이 먼저인지 알 수 없기 때문에 모든 경우를 집계하기로 결정했습니다.

그래서 저는 BFS를 사용했습니다.

BFS는 n*10+1 및 n*2를 대기열에 넣습니다.

n의 int가 넘쳤기 때문에 한 번 틀렸습니다.

롱롱으로 해결했습니다.

코드

#include<iostream>
#include<queue>
using namespace std;

struct Node
{
	long long n;
	int cnt;
};
long long A, B;
int ans = -1;

void BFS()
{
	queue<Node> q;
	q.push({ A, 1 });

	while (!
q.empty()) { auto (n, cnt) = q.front(); q.pop(); if (n == B) { ans = cnt; return; } long long nn; nn = n * 2; if (nn <= B) q.push({ nn, cnt + 1 }); nn = n * 10 + 1; if (nn <= B) q.push({ nn, cnt + 1 }); } } int main() { cin >> A >> B; BFS(); cout << ans; }