16953번: A → B
첫째 줄에 A, B (1 ≤ A < B ≤ 109)가 주어진다.
www.acmicpc.net
[알고리즘]
필자는 B에서 A를 만드는 방법을 사용한다.
1. B % 10 == 1 (일의 자리수가 1이라면) B를 10으로 나눈다(1을 제거한다)
2. B % 2 == 1 (일의자리수가 1이 아니면서 홀수라면) 해당 수는 더이상 연산할 수 없다.
2-1. 왜냐하면 어떤 수도 곱하기 2를 했을 때 홀수가 될 수 없다.
3. B가 짝수라면 B를 2로 나눈다.
1, 2, 3번 과정을 B가 A보다 작거나 같아질 때까지 반복한다.
모든 과정을 마친 후 A와 B가 다르면 -1을 출력하고 A와 B가 같다면 각 과정을 반복한 횟수를 출력한다.
[코드]
import java.io.*; import java.util.StringTokenizer; class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); StringTokenizer st = new StringTokenizer(br.readLine()); int A = Integer.parseInt(st.nextToken()); int B = Integer.parseInt(st.nextToken()); int answer = 1; while (B > A) { if (B % 10 == 1) B /= 10; else if (B % 2 == 1) break; else B /= 2; answer++; } if (B != A) bw.write(-1 + ""); else bw.write(answer + ""); bw.close(); } } |
'백준' 카테고리의 다른 글
[백준/JAVA] 17615번: 볼 모으기 (0) | 2023.02.08 |
---|---|
[백준/JAVA] 2212번: 센서 (0) | 2023.02.07 |
[백준/JAVA] 1946번: 신입 사원 (0) | 2023.02.06 |
[백준/JAVA] 2217번: 로프 (0) | 2023.02.02 |
[백준/JAVA] 9935번 문자열 폭발 (0) | 2023.01.31 |