[Swift]BOJ-16953

BOJ-16953, A→B

문제 📑

https://www.acmicpc.net/problem/16953

 

16953번: A → B

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

www.acmicpc.net

 

문제 정리 ▾

BOJ-16953

  • A, B를 입력받는다.
  • 두 연산을 이용해 A를 B로 만드는데 필요한 연산의 최솟값을 구하면 된다.
  • A가 B가 되기 위한 연산은 아래와 같다.
    • 2를 곱한다.
    • 1을 수의 가장 오른쪽에 추가한다.

 

접근 🚶🏻

나의 생각 ▾

  • 백트래킹으로 B를 A로 만드는 횟수를 카운팅 하려고 했다.

 

내 코드(시간 초과 코드) ▾

import Foundation

func solution() {

    let tc = readLine()!.split(separator: " ").map{ Int(String($0))! }
    let a = tc[0]
    var b = tc[1]
    var count: Int = 1

    while b != a {
        if b % 2 == 0 {
            b /= 2
        } else if b % 10 != 1 {
            print("-1")
            exit(0)
        } else {
            b /= 10
        }
        count += 1
    }
    print(count)
}

solution()
  • While 조건이 애매하고 끝이 정확히 나지 않아 시간 초과가 뜬 것 같다.

 

내 코드(시간 초과 이슈 해결) ▾

import Foundation

func solution() {

    let tc = readLine()!.split(separator: " ").map{ Int(String($0))! }
    let a = tc[0]
    var b = tc[1]
    var count: Int = 1

    while a < b {
        if b % 2 == 0 {
            b /= 2
        } else if b % 10 != 1 {
            break
        } else {
            b /= 10
        }
        count += 1
    }
    a == b ? print(count) : print("-1")
}
solution()
  • While문 조건을 바꾸고, exit(0)이 아닌 break로 연산을 다 시켜버리고 결과를 출력시켰다.

 

Additional 📂

  • While문을 쓸 때는 정확히 끝나는 시점을 잘 잡아주어야겠다.
  • 시간 초과만 뜨면 예민해지는 코알못..😅

'Algorithm.zip' 카테고리의 다른 글

[Swift]BOJ-3085  (0) 2022.07.12
[Swift]BOJ-1744  (0) 2022.04.07
[Swift]BOJ-1946  (0) 2022.04.06
[Swift]BOJ-1026  (0) 2022.04.04
[Swift]BOJ-11726  (0) 2022.02.07