문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/77884
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
N의 약수의 개수를 구할 때 반복 횟수는 1부터 N까지 for문을 모두 순회하는 것이 아니라 N의 제곱근 만큼 반복하면 된다.
-> N의 약수의 개수를 구하기 위한 반복 횟수 = Math.sqrt(N)
약수의 개수가 짝수인 수 - Math.sqrt(N) != 0
약수의 개수가 홀수인 수 - Math.sqrt(N) == 0
class Solution {
public int solution(int left, int right) {
int answer = 0;
for(int num=left; num<=right; num++){
if(num % Math.sqrt(num)==0){
answer-=num;
}
else
answer+=num;
}
return answer;
}
}
위에서 말했다 싶이 반복문은 left~right 만큼 순회하고,
약수의 개수가 짝수인경우(Math.sqrt(N) !=0
)에는 answer에 더해주고, 약수의 개수가 홀수인 수(Math.sqrt(N) == 0
)에는 answer에 값은 빼준다.
문제를 천천히 읽고 깊이 생각해보면 해결책은 쉽게 나온다. 문제를 쓱 보고 간단하다고 쉬운문제라고 판단하지 말자.