HIT해
[Swift/백준] 코딩 테스트 준비 - 기초 , 약수의 합 본문
728x90
https://www.acmicpc.net/problem/17425
약수의 합 공식인 N/i * i 을 하면 시간 초과가 난다.
이 문제는 dp로 약수들의 합을 계산해둔 배열과
누적합을 더해둔 배열을 이용해서 해결해야한다.
import Foundation
func main(){
// 약수의 합
var dp = [Int](repeating: 1, count: 1000001)
// 누적합
var s = [Int](repeating: 1, count: 1000001)
for i in 2...1000000 {
var j = 1
while i*j <= 1000000 {
dp[i*j] += i
j += 1
}
}
for i in 2...1000000 {
s[i] = s[i-1] + dp[i]
}
let N = Int(readLine()!)!
for _ in 0..<N {
let M = Int(readLine()!)!
print(s[M])
}
}
main()
'Swift > Swift 알고리즘' 카테고리의 다른 글
[Swift/백준] N과 M(1) (1) | 2024.10.03 |
---|---|
[Swift] 알고리즘 약수,소수 공식들 (0) | 2024.10.01 |
[Swift] 조합 (0) | 2024.10.01 |
[Swift] 배열 선언하기 (0) | 2024.10.01 |
[Swift/프로그래머스] 세균증식 ( 제곱 ) (0) | 2024.10.01 |