BOJ-16953, A→B
문제 📑
https://www.acmicpc.net/problem/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 |