[λ°±μ€] (Swift) 17425λ² - μ½μμ ν©
μ΄κ² μ 골λμ§? νλ€κ° μμ£Όκ·Έλ₯ νΈμ€μ¨λ¬λ λ¬Έμ !!
π λ¬Έμ
https://www.acmicpc.net/problem/17425
17425λ²: μ½μμ ν©
λ μμ°μ Aμ Bκ° μμ λ, A = BCλ₯Ό λ§μ‘±νλ μμ°μ Cλ₯Ό Aμ μ½μλΌκ³ νλ€. μλ₯Ό λ€μ΄, 2μ μ½μλ 1, 2κ° μκ³ , 24μ μ½μλ 1, 2, 3, 4, 6, 8, 12, 24κ° μλ€. μμ°μ Aμ μ½μμ ν©μ Aμ λͺ¨λ μ½μλ₯Ό λ
www.acmicpc.net
λμΌ! μ΄μ μ νμλ 'μ½μμν©2'λ¬Έμ λ λκ°μμ? κ·Όλ° κ·Έλ₯ , μ λ ₯λ§ λ€λ₯΄κ² νλ©΄ λλκ±°μμ!!!
π μκ°μ΄κ³Ό ^___^
μ¬μ§μ΄ μ λ ₯ λ°©μλ μλͺ»μμλ€. μ΄λ°μ μ λ ₯λλ 5λ₯Ό λͺ»λ³΄κ³ , κ·Έλ₯ λμμ΄ μ λ ₯μ΄ κ°λ₯ν? λ¬Έμ μΈμ€ μκ³ whileμΌλ‘ μμ±νλ€.
while let N = Int(readLine()!) {
print(solution(N))
}
private func solution(_ N: Int) -> Int {
let N = N ?? 0
var sum = 0
for i in 1..<N+1 {
sum += (N / i) * i
}
return sum
}
μ₯,, μκ°μ΄κ³Όλ€? μΌλ¨, μ΄λ°μ Nκ°λ₯Ό μ λ ₯ν κ±°λΌλ Tλ₯Ό μ λ ₯λ°μμ΄μΌνλλ°, λλ λμμ΄ μ λ ₯μ΄ κ°λ₯νκ² μ½λλ₯΄ μμ±ν΄μ νλ¦°μ€ μμλ€. κ·Όλ° ,, μ΄λ¬Έμ λ μλμλ€.!!
μ λ ₯μ μ λλ‘ λ°μλ μκ°μ΄κ³Όμλ€.
π ν΄κ²°λ°©λ²μ μκ°ν΄λ³΄μ
μ°μ , μμ λ₯Όλ³΄λ©΄, T = 5 μ μ λ ₯λ°λλ€. λ΄ μ½λλ₯Ό 보면, λ§μ½ 5λ²μ μ λ ₯λ°μΌλ©΄, 5λ² λͺ¨λ g(N)μ κ³μ°νκΈ° μν΄μ μ°μ°μ λ°λ³΅νλ€.
μμ μν©μΌλ‘ μκ°ν΄λ³΄λ©΄
g(1) μ ꡬνκΈ° μν΄μ f(1) ꡬνκ³ sumμΈ f(1) ꡬν¨
g(2) λ₯Ό ꡬνκΈ° μν΄μ f(1), f(2) ꡬνκ³ sum μΈ f(1) + f(2) ꡬν¨
g(10)μ ꡬνκΈ° μν΄μ f(1), f(2), f(3), f(4), f(5)....f(10) ꡬνκ³ , sum μΈ f(1)+f(2)+f(3)+...+f(10) ꡬν¨
.......
μ΄λ κ² λ°λ³΅λλ€.
μΈλ°μλ μ°μ°μ΄ λ§μμ‘λ€. f(2)λ₯Ό μ΄μ μ ꡬν΄λ¨λλ°, μ΄λ₯Ό μ¬μ¬μ©ν μ μμκΉ? λ, μ§κΈ μμ μμλ§ μ΄μ λμ§, λ§μ½ T = 100000 μ μ λ ₯λ°κ² λλ©΄, 10λ§λ²μ μ°μ°ν΄μ€μΌνλ€. μ΄ μ°μ°μ μ€μ΄κΈ° μν΄μλ,,, dp ννλ‘ λ§λ€μ΄μ€μΌκ² λ€κ³ νλ¨νλ€.
μ¦, λͺ¨λ λ΅μ 미리 ꡬν΄λκ³ , λ§μ§λ§μ μ λ ₯λ°λ i μ λν΄μ dp[i]λ₯Ό λ°λ‘ μΆλ ₯ν μ μκ² λ§λ€μ΄ λλ κ²μ΄λ€.
[ f(1), f(1)+f(2), f(1)+f(2)+f(3), f(1)+f(2)+f(3)+f(4), ,,,,,,, f(1)+..+f(100000) ]
μ΄λ κ² κ΅¬ν΄λ³΄μ.
π 첫λ²μ§Έ μλ
μ΄λ κ² μ½λλ₯Ό μμ±νλ€.
[ f(1), f(1)+f(2), f(1)+f(2)+f(3), f(1)+f(2)+f(3)+f(4), ,,,,,,, f(1)+..+f(100000) ]
μ΄ ννλ₯Ό λ§λ€κΈ° μν΄μ, divλΌλ λ°°μ΄μ λ§λ€μκ³ , divλ iμ μ½μμ ν©μ λ£μ΄λ κ²μ΄λ€. μ΄ λ©μλλ₯Ό ꡬνλ κ²μ λν΄μλ μκ°μ΄ μ‘°κΈ νμνλλ°, μΈν°λ·μ μ‘°κΈ ,, λ€μ Έλ΄€λ€ 미리 ꡬνκΈ° μν΄μλ 1μ λ°°μμ 1μ© λν΄μ£Όκ³ , 2μ λ°°μμλ 2λ₯Ό λν΄μ£Όκ³ , 3μ λ°°μμλ 3μ λν΄μ£Όκ³ ,,, μ΄λ°μμΌλ‘ 100λ§κΉμ§ κ° iμ μ½μμ ν©μ ꡬν΄μ£Όμλ€. κ·Έ λ°°μ΄μ΄ λ°λ‘ div
κ·Έλ¦¬κ³ sum λ°°μ΄μ λμ ν©μ ꡬν΄μ£Όμλ€.
private func solution() {
let accumulate = accumulateSum()
let T = Int(readLine()!)!
for _ in 0..<T {
let num = Int(readLine()!)!
print(accumulate[num])
}
}
private func accumulateSum() -> [Int] {
var div = Array(repeating: 0, count: 1000000)
var sum = Array(repeating: 0, count: 1000000)
for i in 1...1000000 {
var j = 1
while i*j < 1000000 {
div[i*j] += j
j += 1
}
}
sum[1] = div[1]
for i in 2..<div.count {
sum[i] = sum[i-1] + div[i]
}
return sum
}
solution()
μ
λ°νμμλ¬..? μ΄λ μμΈλ₯Ό λͺ»μ‘μλ보λ€.. λλ체 λκΉ!
π μ λ΅ μ½λ
λ°νμ μλ¬μ λ¬Έμ λ λ²μμλ€.
var div = Array(repeating: 0, count: 1000000)
var sum = Array(repeating: 0, count: 1000000)
while i*j < 1000000 { .. }
div μ sumμ μ΄λ κ² μ€μ ν΄μ£Όκ³ whileλ¬Έμ 1000000 λ―Έλ§μΌλ‘ μ€μ ν΄μ£Όμλ€. μ΄λ κ² νκ² λλκΉ, Nμ μ΅λκ°μΈ 1000000μ μ λ ₯ν μ μμλ€. κ·Έλμ λ²μλ₯Ό μ‘°μ ν΄μ£Όλ©΄μ λ°νμμλ¬λ₯Ό ν΄κ²°νλ€!
private func solution() {
let accumulate = accumulateSum()
let T = Int(readLine()!)!
for _ in 0..<T {
let num = Int(readLine()!)!
print(accumulate[num])
}
}
private func accumulateSum() -> [Int] {
var div = Array(repeating: 0, count: 1000001)
var sum = Array(repeating: 0, count: 1000001)
for i in 1...1000000 {
var j = 1
while i*j <= 1000000 {
div[i*j] += j
j += 1
}
}
sum[1] = div[1]
for i in 2..<div.count {
sum[i] = sum[i-1] + div[i]
}
return sum
}
solution()