→ Problems

[Algorithm] 백준 - 1019번 책 페이지 (Swift)

Swift librarian 2024. 7. 6. 21:23

문제 소개

문제 자체는 아주 간단하지만 N이 10억이하의 자연수라는 조건이 있기 때문에 1부터 숫자를 늘려가며 판별하면 무조건 시간 초과가 걸린다.
 

문제 풀이

let input = readLine()!
let a = Array(input.reversed()).map { Int(String($0))! }
let n = Int(input)!

var ans = Array(repeating: 0, count: 10)

for (i, e) in a.enumerated() {
    let p = Int(pow(10.0, Double(i)))
    
    for j in 0...9 {
        ans[j] += n / (p * 10) * p
    }
    
    if e > 0 {
        for j in 1..<e {
            ans[j] += p
        }
    } else {
        ans[0] -= p
    }

    ans[e] += n % p + 1
}

print(ans.map { String($0) }.joined(separator: " "))