• toc {:toc}

문제 ν™•μΈν•˜κΈ°

풀이

순방ν–₯으둜 계산을 μƒκ°ν–ˆμ„ λ•Œ 1을 μΆ”κ°€ν•˜λŠ” 기쀀이 λͺ…ν™•ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ—­μœΌλ‘œ Bμ—μ„œ A둜 κ°€λŠ” 방식을 μƒκ°ν–ˆλ‹€. 2둜 λ‚˜λˆ μ£Όλ©΄μ„œ 일의 μžλ¦¬μ— 1이 λ‚˜μ˜€λŠ” 경우 1을 μ œμ™Έν•΄μ£Όλ©° 연산을 μΉ΄μš΄νŠΈν•œλ‹€.

162 β†’ 81 β†’ 8 β†’ 4 β†’ 2

1이 μ•„λ‹Œ ν™€μˆ˜κ°€ λ‚˜μ˜¬ 경우 λ‚˜λˆŒ 수 μ—†κΈ° λ•Œλ¬Έμ— ν•΄λ‹Ή 값을 λ§Œλ“€ 수 μ—†μœΌλ―€λ‘œ -1을 좜λ ₯ν•œλ‹€. Bκ°€ A보닀 μž‘μ•„μ§€λŠ” 경우, A둜 Bλ₯Ό λ§Œλ“€ 수 μ—†λ‹€λŠ” 말과 λ™μΉ˜μ΄κΈ° λ•Œλ¬Έμ— -1을 좜λ ₯ν•œλ‹€.

#include <bits/stdc++.h>
using namespace std;
 
int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
 
    int a, b, res = 0;
    
    cin >> a >> b;
 
    while(true){
        if(b % 10 != 1 && b % 2 == 1){
            cout << -1 << '\n';
            exit(0);
        }
        else if(b % 10 == 1){
            res++;
            b = b / 10;
        }
        else{
            b = b / 2;
            res++;
        }
        if(a > b){
            cout << -1 << '\n';
            exit(0);
        }
        else if(a == b){
            break;
        }
    }
 
    cout << res+1 << '\n';
 
    return 0;
}