[Java] 백준 16953번

박세윤·2022년 8월 1일
0

BaekJoon Online Judge

목록 보기
87/95
post-thumbnail

백준 16953번

A -> B

문제

정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.

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

A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자.

입력

첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.

출력

A를 B로 바꾸는데 필요한 연산의 최솟값에 1을 더한 값을 출력한다. 만들 수 없는 경우에는 -1을 출력한다.

예제

알고리즘 분류

  • 그래프 이론
  • 그리디 알고리즘
  • 그래프 탐색
  • 너비 우선 탐색

코드

import java.util.*;
import java.io.*;

public class Main {
	public static long A, B, result;
	public static boolean flag;
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		
		A = Long.parseLong(st.nextToken());
		B = Long.parseLong(st.nextToken());
		
		DFS(A, 1);
		
		if(flag)
			System.out.println(result);
		else
			System.out.println(-1);
	}
	
	public static void DFS(long num, int count) {
		if(num > B)
			return;
		
		if(num == B) {
			result = count;
			flag = true;
			return;
		}
		
		DFS(num*2, count+1);
		DFS(num*10 + 1, count+1);
	}
}

풀이

DFS를 활용하여 문제를 해결했다. 갈래가 2배, 1붙이기 두가지 밖에 없고, 반복해도 된다.

profile
개발 공부!

0개의 댓글