두 정수 left
와 right
가 매개변수로 주어집니다. left
부터 right
까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
left
≤ right
≤ 1,000입출력 예
left | right | result |
13 | 17 | 43 |
24 | 27 | 52 |
입출력 예 설명
입출력 예 #1
다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.
수 | 약수 | 약수의 개수 |
13 | 1, 13 | 2 |
14 | 1, 2, 7, 14 | 4 |
15 | 1, 3, 5, 15 | 4 |
16 | 1, 2, 4, 8, 16 | 5 |
17 | 1, 17 | 2 |
따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.
입출력 예 #2
다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.
수 | 약수 | 약수의 개수 |
24 | 1, 2, 3, 4, 6, 8, 12, 24 | 8 |
25 | 1, 5, 15 | 3 |
26 | 1, 2, 13, 26 | 4 |
27 | 1, 3, 9, 27 | 4 |
따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.
function solution(left, right) { let answer = 0; for(let i = left; i <= right; i++) { let temp = 0; for(let j = 1; j <= (i / 2); j++) { if(!(i % j)) { temp++; } } answer = temp % 2 ? answer + i : answer - i; } return answer; }
바깥쪽에는 주어진 범위안의 숫자들을 돌게 하고, 안쪽에는 바깥쪽 숫자를 나눌 수들을 돌게 함.
안쪽 반복문의 반복 범위를 반까지만 돌게 하고, 약수의 값이 홀수가 나오면 자기자신을 더해서 짝수개가 되고, 약수의 값이 짝수가 나오면 자기자신을 더해 홀수개가 된다.
마지막에 약수 개수가 홀수냐 짝수냐에 따라 더하고 빼주면 됨.