본문 바로가기

코딩테스트/백준

BOJ-16953 A -> B Swift

문제

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

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

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

입력

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

출력

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

내가 푼 풀이

- B를 역순으로 가능한 두가지의 역연산을 한다.

- B의 최댓값이 10^9이므로 UInt64에 담아서 연산한다.

- A에서 두가지연산을 했을때 결과값이 중복이 될 수 없다.

- 2의 배수의 끝자리는 1이 될 수 없고, 뒷자리가 1이면 2의배수가 아니기때문이다.

 

import Foundation

let input = readLine()!.split(separator: " ").map{ UInt64($0)! }
var a = UInt64(input[0])
var b = UInt64(input[1])
var result = 1

while b != a {
    
    if b < a {
        result = -1
        break
    }
    if b % 2 == 0 {
        b /= 2
    } else if b % 10 == 1 {
        b /= 10
    } else {
        result = -1
        break
    }
    result += 1
}
print(result)

 

'코딩테스트 > 백준' 카테고리의 다른 글

BOJ-1339 단어수학 Swift  (0) 2023.05.15
BOJ-1439 뒤집기 Swift  (0) 2023.05.08
BOJ-1946 신입 사원 Swift  (0) 2023.05.07
BOJ-1715 카드 정렬하기 Swift  (0) 2023.05.06
BOJ-10610 30 Swift  (0) 2023.05.05