
해당 문제를 보고 인수로 받는 특정 수에 대한 약수의 갯수를 카운트하는 함수를 따로 만들어야 겠다고 생각했다. 그래서 약수의 갯수를 받는 함수를 getCount()라고 만들었다.
import Foundation
func solution(_ left:Int, _ right:Int) -> Int {
var result = 0
for i in left...right{
if getCount(i) % 2 == 0 {
result += i
} else {
result -= i
}
}
return result
}
func getCount(_ num:Int) -> Int {
var result = 0
for i in 1...num{
if num % i == 0{
result += 1
}
}
return result
}
문제는 간단하게 풀었다. 제출한 후 다른사람들의 풀이를 확인해보니
import Foundation
func solution(_ left:Int, _ right:Int) -> Int {
var answer = 0
for number in left...right{
if floor(sqrt(Double(number))) == sqrt(Double(number)) {
answer -= number
} else {
answer += number
}
}
return answer
}
이런 풀이도 발견하였다. sqrt(Double(number))은 주어진 number의 제곱근을 계산하는 함수로 부동소수점에만 작동한다. 그래서 int형인 number을 먼저 Double로 변환한 뒤에 sqrt() 해준것이다. 그리고 floor()함수는 주어진 숫자를 내림하여 가장 까가운 정수를 반환하는 함수이다. 예를 들어, floor(3.8)은 3을 반환한다.
이 풀이는 어떤수의 약수의 개수가 홀수이려면, 해당수는 완전제곱수여야 한다는 사실을 이용한 풀이이다..!!