반응형
두 수 A와 B를 입력받으면, 'A에 2를 곱하거나' '1을 붙이는' 방법으로만 B를 만드는 문제이다.
나는 어떻게 해결했냐면... 쉽게 설명하자면
1. B의 1의 자리가 1이라면 B에서 10을 나누고,
2. 그게 아니라면 B에서 2를 나눠서
B가 A보다 작아질 때까지 반복했다.
예를 들면 162의 경우에는, 1의 자리가 1이 아니므로 2를 나눠 81으로 만든 후 sum(결과값)에 1을 더한다.
그 다음에는 B가 81이 되므로, 1의 자리가 1이므로 10을 나눈 후 sum에 1을 더한다.
다음은 B가 8이므로, 1의 자리가 1이 아니므로 2를 나눠 4로 만든 후 sum에 1을 더한다.
다음은 B가 4이므로, 1의 자리가 1이 아니므로 2를 나눠 2로 만든 후 sum에 1을 더한다.
→ 이후에는 B > A가 아니므로 반복문을 벗어난다.
이렇게 하면 sum에는 4가 저장되며, B = A인 경우도 포함해야 하므로 sum에 1을 더한 값을 출력해주면 된다.
반복문을 벗어난 상태에서 B = A가 아니라면, A를 B로 만들 수 없는 경우이므로 -1을 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Arrays;
public class AtoB {
public static int stoi(String str) {
return Integer.parseInt(str);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
double A = stoi(st.nextToken());
double B = stoi(st.nextToken());
int sum = 0;
while ((long)B > (long)A) {
sum++;
if ((long)B%10 == 1) {
B -= 1;
B /= 10;
} else {
B /= 2;
}
}
if ((long)(B*10) == (long)(A*10)) {
System.out.println(sum + 1);
} else {
System.out.println(-1);
}
}
}
로그인
www.acmicpc.net
'컴퓨터 공학 > 백준' 카테고리의 다른 글
[백준] JAVA 자바 : 신입 사원 (1946번) (0) | 2024.03.22 |
---|---|
[백준] JAVA 자바 : 30 (10610번) (0) | 2024.03.14 |
[백준] JAVA 자바 : 카드 정렬하기 (1715번) (0) | 2024.03.08 |
[백준] JAVA 자바 : 주유소 (13305번) (0) | 2024.02.23 |
[백준] JAVA 자바 : 수들의 합 (1789번) (0) | 2024.02.23 |