[알고리즘] A → B - 백준 16953

se.jeon·2023년 2월 15일
0

알고리즘

목록 보기
5/21

문제

과정

처음에는 12904의 A와 B, 1463의 1로 만들기를 생각하면서 풀었다.

갑자기 BFS, Queue에 얽매여서 헤메다가 그냥 에라이 하고 문제를 그대로 흐름에 맞춰서 구현했는데, 정답이여서 놀랐다.

알고 보니, 다른 방식으로의 풀이가 많은 문제였다. dp로 푸는 경우도 있다고 하더라.

결과

//
// Created by 전시은 on 2023/02/15.
//
// 문제 :: A → B
// 링크 :: https://www.acmicpc.net/problem/16953
// 입력 :: 첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
// 출력 :: A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.


#include <iostream>
using namespace std;


int main()
{
    cin.tie(NULL);
    ios_base::sync_with_stdio(false);

    int nA, nB, nCount = 0;
    cin >> nA >> nB;

    while (1)
    {
        // 결과값 없음
        if (nA > nB)
        {
            cout << -1;
            break;
        }
        // 결과값 : 카운트
        if (nA == nB)
        {
            cout << nCount + 1;
            break;
        }

        // 끝에서부터 접근한다.
        // 10을 곱하고 1을 붙이므로 나머지가 1이 되거나
        if (nB % 10 == 1)
        {
            nB /= 10;
        }
        // 2로 곱해서 값이 만들어지는 경우
        else if(nB % 2 == 0)
        {
            nB /= 2;
        }
        // 그렇지 않으면 완성할 수 없는 값.
        else
        {
            cout << -1;
            break;
        }
        nCount++;
    }

    return 0;
}
profile
취미 다이소

0개의 댓글