백준 [16953] "A -> B"

Kimbab1004·2024년 2월 13일
0

Algorithm

목록 보기
10/102


A->B 덱을 이용해서 해결 할 수 있는 문제였다. 그런데 몇 가지 실수를 통해 정답 도출간 시간이 걸렸다. 문제를 살펴보면 조건 없이 두가지 연산이 주어진다.
#2를 곱한다.
#1을 수의 가장 오른쪽에 추가한다.
이 두가지 경우의 수를 모두 통해 나온 결과를 얻어야 하는데 두개중 하나의 연산만을 실행하게 코드를 짜버렸다.

		//잘못된 코드
        if (now.first == result) {
			return now.second;
		}
		else if (now.first * 2 <= result) {
        // 재귀 호출때 now.first * 2도 아닌 now.first를 넘겨버리는 실수도 저질렀다.
			ary.push_back(make_pair(now.first * 2, now.second + 1));
		}
		else if (now.first * 10 + 1 <= result) {
        // 재귀 호출때 now.first * 10 +1 도 아닌 now.first를 넘겨버리는 실수도 저질렀다.
			ary.push_back(make_pair(now.first * 10 + 1, now.second + 1));
		}
//정답 코드
#include <iostream>
#include <deque>
#include <string>
#include <sstream>
#include <vector>
#include <string>
#include <queue>
#include <algorithm>
#define MAX 1000001

using namespace std;
int a, b;


int bfs(int start,int result) {
	deque<pair<long long, long long>> ary;
	ary.push_back(make_pair(start,1));
	while(!ary.empty()){
		pair<long, long> now = ary.front();
		ary.pop_front();
		//cout << now.first << now.second << "\n";
		if (now.first == result) {
			return now.second;
		}
		if (now.first * 2 <= result) {
			ary.push_back(make_pair(now.first * 2, now.second + 1));
		}
		if (now.first * 10 + 1 <= result) {
			ary.push_back(make_pair(now.first * 10 + 1, now.second + 1));
		}
	}
	return -1;
}


int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> a >> b;

	cout<<bfs(a,b);

    return 0;
}

0개의 댓글