월간 코드 챌린지 시즌2
🔥 약수의 개수와 덧셈 🔥
두 정수 left부터 right까지의 모든 수 중에서 약수의 개수가 짝수인 수는 더하고, 홀수인 수는 뺀 수를 return하는 solution을 완성해보자.
left | right | result |
---|---|---|
13 | 17 | 43 |
24 | 27 | 52 |
class Solution {
public int solution(int left, int right) {
int answer = 0;
while(left <= right){
int n=0;
for(int i=1;i<=left;i++){
if(left%i==0){
n++;
}
}
if(n%2==0){
answer = answer + left;
}else{
answer = answer - left;
}
left = left+1;
}
return answer;
}
}
생각나는데로 그냥 쉽게 해결한 문제이다.
메모리: 81.4 MB, 시간: 12.14 ms
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;
}
}
메모리: 74.7 MB, 시간: 0.03 ms
ㅎㅎㅎ 뭐야
문제를 풀기는 했지만 전혀 올바른 풀이가 아니었다...
while문이 아닌 for문으로 left가 right보다 작을때까지의 반복문을 돌려주었다.
그리고 Math.sqrt를 통해서 제곱수를 구해주었다.
i가 i의 제곱수로 나누었을때 0 이라면 answer에 i를 빼주었고
제곱수가 아니라면 더해주었다.
이 풀이의 핵심은 i가 제곱수라면 약수의 개수가 홀수 제곱수가 아니라면 약수의 개수가 짝수개라는 것이다.