코딩테스트/자바 문제풀이

[그리디] 백준 16953 A→B

승요나라 2024. 8. 30. 03:36

16953번: A →B

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

 

# 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        long a = Long.parseLong(st.nextToken());
        long b = Long.parseLong(st.nextToken());
        long count = 0;

        while (a != b && b > a) {
            if (b % 10 == 1) {
                b /= 10;
                count++;
            } else if (b % 2 == 0) {
                b /= 2;
                count++;
            } else {
                System.out.println(-1);
                return;
            }
        }

        if (a == b) System.out.println(count + 1);
        else System.out.println(-1);
        br.close();
    }
}
  • B에서 일의 자리수가 1이거나 2로 나눌 수 있는지 검사하며 거꾸로 A로 만들어보면 되는 쉬운 문제였다.
  • 조건에 해당되지 않으면 바로 리턴시켰지만 반례가 있어 출력 전에도 확실하게 두 수가 일치하는지 검사를 추가했다.