문제

풀이
import Foundation
func solution(_ n:Int) -> Int {
var answer = 0
if n % 2 == 1{
for i in 1 ... n{
if i % 2 == 1{
answer += i
}
}
}else{
for i in 1 ... n{
if i % 2 == 0{
answer += i*i
}
}
}
return answer
}

최적화1
import Foundation
func solution(_ n:Int) -> Int {
return n % 2 == 0 ? (n / 2 * (n / 2 + 1) * (n + 1)) * 2 / 3 : (n / 2 + 1) * (n / 2 + 1)
}
최적화2
import Foundation
func solution(_ n:Int) -> Int {
if n % 2 == 0 { return stride(from: 2, through: n, by: 2).reduce(0) { $0 + $1 * $1 } }
else { return stride(from: 1, through: n, by: 2).reduce(0, +) }
}
요약
- 최적화 1번 방법은 점화식을 사용한 방법
- 최적화 2번 방법은 stride 펑션과 reduce 펑션을 사용한 방법
- 점화식 짜기가 귀찮다면 방법 2를 사용하자!