boj16953

임종혁·2024년 2월 10일

문제 풀이

  • 2를 곱한다
  • 1을 수 가장 오른쪽에 추가한다

n m 을 받는다

m 이 가장 마지막이 1 인지 확인한다

  • 1 인경우 num의 1의 자리 수를 뺀다 count +1
    아닌 경우
    2 로 나누어 질때
    num을 2 로 나눈다 카운터 +1
    아닐때
    -1 을 출력 한다

  • num 이 n 이랑 같다면 출력 return

  • 작으면 -1 출력 return 한다

    즉 이번 문제는 재귀를 이용해 top-down 방식으로 접근해 풀었다.

    코드

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

public class boj16953 {
    private static int n;
    public static void main(String[] args) throws IOException{
        BufferedReader br =  new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        n = Integer.parseInt(st.nextToken());
        int m = Integer.parseInt(st.nextToken());

        re(m,0);

    }
    private static void re(int num, int count){
        if(num==n){
            System.out.println(count+1);
            return;
        }
        if(num < n){
            System.out.println(-1);
            return;
        }

        String sNum = String.valueOf(num);
        if(num%2==0){
            re(num/2,count+1);
        } else{
            if(sNum.charAt(sNum.length()-1) == '1'){
                int n = Integer.parseInt(sNum.substring(0,sNum.length()-1));
                re(n,count+1);
            }else{
                System.out.println(-1);
                return;
            }
        }

    }
}

0개의 댓글