문제
정수 A를 B로 바꾸려고 한다. 가능한 연산은 다음과 같은 두 가지이다.
- 2를 곱한다.
- 1을 수의 가장 오른쪽에 추가한다.
A를 B로 바꾸는데 필요한 연산의 최솟값을 구해보자
2 162
풀이
- A가 B로 가는 걸 구하는 건 정말 막막하다.
- 거꾸로 생각해보면 쉬웠다. B-> A 가 되는 걸 구해보면 쉽게 구할 수 있다.
- 162가 2로 나눠질 경우
- 2로 나눠지지 않을 경우 -> (끝자리가 1로 끝나는지 안 끝나는지 안 끝날 경우 -1 출력)
162를 2로 나누면
81 -> 끝자리가 1로 끝남 1빼버림
8 -> 2로 나눠짐
4 -> 2로 나눠짐
2 끝
카운트는 총 4번이고 여기서 1을 더해서 출력하면 됨 출력 조건에 그렇게 되어음
import javax.swing.plaf.synth.SynthOptionPaneUI;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.Buffer;
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());
int A = Integer.parseInt(st.nextToken());
int B = Integer.parseInt(st.nextToken());
int count = 0;
while (true){
if(B == A){
count++;
break;
}
if(B%2 == 0){
B = B/2;
count++;
}else{
String temp = Integer.toString(B);
if(temp.charAt(temp.length() - 1) == '1'){
B= Integer.parseInt(temp.substring(0,temp.length()-1));
if(B < A){
count = -1;
break;
}
count++;
}else{
count = -1;
break;
}
}
}
System.out.println(count);
}
}
'알고리즘' 카테고리의 다른 글
백준 No.1783 병든 나이트 - JAVA (0) | 2023.03.06 |
---|---|
백준 No.1719 택배 - JAVA (0) | 2023.03.05 |
백준 No.14938 서강그라운드 - JAVA (0) | 2023.03.03 |
백준 No.5972 택배 배송 - JAVA (0) | 2023.03.02 |
백준 No.1446 지름길 - JAVA (0) | 2023.03.01 |