문제 설명 두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요. 제한사항 1 ≤ left ≤ right ≤ 1,000
입출력 예
입출력 예 설명
🔵 풀이 - filter, count
1. 기본값이 0인 result 변수를 만들고,
2. left...right의 약수의 개수를 하나씩 구하여
3. 개수가 짝수이면 result에 더하고, 홀수이면 result에서 빼는 방식으로 구현했다.
func solution(_ left:Int, _ right:Int) -> Int {
var result: Int = 0
for num in (left...right) {
result += Array(1...num).filter({num % $0 == 0}).count % 2 == 0 ? num : -num
}
return result
}
따라서, 이 문제에서 left...right 사이의 수가 제곱수라면 빼고, 아니라면 더하는 방식으로 문제를 해결할 수 있다.
제곱수인지 판단하기 위해서는, 제곱근이 자연수인지 확인하면 된다.
다시 말해, sqrt(_:)를 씌워서 나온 제곱근에 소수점 이하 숫자가 있는지 확인하면 된다.
=> floor(sqrt(숫자)) == sqrt(숫자) 인지 확인
func solution(_ left:Int, _ right:Int) -> Int {
var result: Int = 0
for num in (left...right){
result += floor(sqrt(Double(num))) == sqrt(Double(num)) ? -num : num
}
return result
}