[코딩테스트 연습] 약수의 개수와 덧셈
in Code
약수의 개수와 덧셈
문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한 사항
- 1 ≤ 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,26 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,25 3 26 1,2,13,26 4 27 1,3,9,27 4 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.
코드 작성
function solution(left, right) {
let obj = {};
let answer = 0;
for (let i = left; i <= right; i++) {
obj[i] = [];
for (k = 1; k <= i; k++) {
if (i % k === 0) {
obj[i].push(k);
}
}
}
for (const el in obj) {
if (obj[el].length % 2 === 0) {
answer += el * 1;
} else {
answer += el * -1;
}
}
return answer;
}
[ TIP ]
left ~ right 사이 수들의 약수를 구하고, 모든 약수를 객체 안에 배열 형태로 담아준다. for-in문을 활용하여 객체에 담긴 각 배열의 길이가 짝수 또는 홀수인지 확인하여 값을 구해준다.