[문제설명]
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
[제한사항]
1 ≤ left ≤ right ≤ 1,000
[입출력 예]
class Solution {
public int solution(int left, int right) {
int answer = 0;
for(int i=left; i<=right; i++) { // left부터 right까지의 모든 수들 중
int num = 0; // 약수의 개수
for(int j=1; j<=i; j++) {
if(i%j==0) {
num++;
}
}
if(num % 2 == 0) { // 약수의 개수 짝수인 경우
answer+=i; // 해당 숫자 더함
}
else { // 약수의 개수 홀수인 경우
answer-=i; // 해당 숫자 뺌
}
}
return answer;
}
}
약수의 개수를 구해 짝수인 경우엔 해당 숫자를 더해주고, 아닌 경우엔 빼줘야 하므로 약수의 개수 변수 num을 생성했다.
약수의 개수를 어떻게 구하면 좋을 지 생각해보다가, 1부터 구하려는 숫자 까지(i) for 루프를 돌며 나눴을 때 0이 되는 경우에만 num에 1을 더해주는 방법을 사용했다.
약수의 개수 구하는 방법이 한 번에 떠오르지 않았지만, 생각해내고 나니 쉽게 풀 수 있었던 문제였다.
'Algorithm > Programmers' 카테고리의 다른 글
Programmers / Level 1 / x만큼 간격이 있는 n개의 숫자 (0) | 2022.05.29 |
---|---|
Programmers / Level 1 / 직사각형 별찍기 (0) | 2022.05.29 |
Programmers / Level 1 / 짝수와 홀수 (0) | 2022.05.29 |
Programmers / Level 1 / 신규 아이디 추천 (0) | 2022.05.29 |
Programmers / Level 1 / 두 개 뽑아서 더하기 (0) | 2022.05.27 |