class Solution {
public int solution(int left, int right) {
int ans = 0;
int cnt =0;
for(int i=left; i<=right; i++){
for(int j=1; j<=i; j++){
if(i% j ==0){
cnt++;
}
}
if(cnt % 2==0) ans += i;
else ans -= i;
cnt=0;
}
return ans;
}
}
개수를 세는 변수 cnt를 주어 반복문안에서 약수가 있을 때마다 더해주었다.
cnt의 개수가 짝수면 더하고 홀수면 빼준다.
이후 cnt =0 으로 초기화
class Solution {
public int solution(int left, int right) {
int answer = 0;
for (int i=left;i<=right;i++) {
//제곱수인 경우 약수의 개수가 홀수
if (i % Math.sqrt(i) == 0) {
answer -= i;
}
//제곱수가 아닌 경우 약수의 개수가 짝수
else {
answer += i;
}
}
return answer;
}
}
제곱수인경우 약수의 개수는 홀수, 제곱수가 아닌 경우 약수의 개수는 짝수
이문제를 접하면서 처음 알게된 사실이다. 기억하고 있으면 다른 문제 풀 때 도움이 될 것같다.