728x90
728x90
π νμν 곡λΆ
- μμλ₯Ό νλ³νλ μκ³ λ¦¬μ¦.
- μΌμ°¨μ λ°°μ΄μμ λ κ°μ ν¬μΈν°λ₯Ό μ§μ ν΄ κ³μ°νλ λ°©λ²
π‘ νμ΄ λ°©λ²
μμμ μΈκΈν λ κ°λ μ μ λΆ μ μ©ν΄μ λ¬Έμ λ₯Ό νλ©΄ λ©λλ€. λ¨Όμ , μλΌν μ€ν λ€μ€μ 체λ₯Ό μ΄μ©ν΄ μμλ₯Ό μ°Ύμ΅λλ€. μ°Ύμ μμ λ°°μ΄μ ν΅ν΄ ν¬ ν¬μΈν°λ‘ μ κ·Όν΄μ μ°μλ μμμ ν©μΌλ‘ N μ΄ λ§λλ κ²½μ°μ μλ₯Ό 체ν¬νλ©΄ λ©λλ€!
- checkPrimes ν¨μ :: μλΌν μ€ν λ€μ€μ 체λ₯Ό μ΄μ©ν΄ μμλ₯Ό νλ³νλ ν¨μ
- findSeries ν¨μ :: ν¬ ν¬μΈν°λ₯Ό μ΄μ©ν΄ μ°μλ μμμ ν©μΌλ‘ μμ°μλ₯Ό λνλΌ μ μλ κ²½μ°μ μλ₯Ό μΈλ ν¨μ
π₯ Swift νμ΄
// μμμ μ°μν©
func checkPrimes(n: Int, isPrimes: inout [Bool]) {
// 2 λΆν° n κΉμ§ μμμΈμ§ νμΈνλ€.
for i in 2...n {
if isPrimes[i] == false { continue }
var j = i * 2 // i μ λ°°μλ₯Ό μμλͺ©λ‘μμ μ μΈνλ€.
while j <= n {
isPrimes[j] = false
j += i // i μ λ°°μλ§ νμΈνλ€
}
}
}
func findSeries(n: Int, primes: [Int]) -> Int {
// νλ μ΄μ μ°μλ μμμ ν©μΌλ‘ μμ°μλ₯Ό λνλΌ μ μλ κ²½μ°μ μ μΈκΈ°
// ν¬ ν¬μΈνΈ :: μΌμ°¨μ λ°°μ΄μμ λ κ°μ ν¬μΈνΈλ₯Ό μμ§μ΄λ©° 체ν¬νλ κ²
var start = 0, end = 0
var sum = 0
var count = 0
while end <= primes.count {
if sum >= n {
// sum μ΄ λͺ©νκ°λ³΄λ€ ν¬λ©΄ start κ°μ μ μΈνκ³ , μ€λ₯Έμͺ½μΌλ‘ νμΉΈ μ΄λ
sum -= primes[start]
start += 1
} else {
// sum μ΄ λͺ©νκ°λ³΄λ€ μμΌλ©΄ end κ°μ μΆκ°νκ³ , μ€λ₯Έμͺ½μΌλ‘ νμΉΈ μ΄λ
if end < primes.count { sum += primes[end] }
end += 1
}
if sum == n {
// μλ‘ κ³μ°ν sum κ°μ΄ λͺ©νμ κ°μΌλ©΄ κ²½μ°μ μ μΉ΄μ΄νΈ
count += 1
}
}
return count
}
func BOJ_1644() {
let N = Int(readLine()!)!
guard N > 1 else {
print(0)
return
}
var isPrimes = Array(repeating: true, count: N+1)//1000001)
checkPrimes(n: N, isPrimes: &isPrimes)
var primes: [Int] = []
for i in 2 ... N {
if isPrimes[i] == true {
//print(i)
primes.append(i)
}
}
print(findSeries(n: N, primes: primes))
}
μ°Έκ³ λΈλ‘κ·Έ
ν¬ ν¬μΈν°
μλΌν μ€ν λ€μ€μ 체
728x90
728x90