/*
문제 : left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고,
약수의 개수가 홀수인 수는 뺀 수를 return
자료 : 두 정수 left와 right
조건 :
계획 :
풀이 안에 적어놨음
반성 :
합을 먼저 다 구한뒤 빼는 방법도 있구나.
여러 방법을 생각하지 못하는 게 아쉬움...
*/
const solution = (left, right) => {
let sum = 0;
// 약수 구하는 법. left rgiht 순회하면서 1부터 i까지 커지는 j가 있다고하면 i % j === 0 이면 약수인 숫자 횟수에 추가
// 횟수 % 2 === 0이면 합을 더함
for (let i = left; i <= right; i++) {
let count = 0;
for (let j = 1; j <= i; j++) {
if (i % j === 0) {
count = count + 1;
}
}
if (count % 2 === 0) {
sum = sum + i;
} else {
sum = sum - i;
}
}
return sum;
};
// 다른 사람 풀이
const solution2 = (left, right) => {
// 일단 전체의 합계를 다 더하고 거기서 제곱수인걸 빼줌. 제곱근이 정수면 약수의 개수가 홀수라서.
let sum = ((left + right) / 2) * (right - left + 1);
for (let i = left; i <= right; i++) {
if (Number.isInteger(Math.sqrt(i))) {
console.log(sum, i);
sum = sum - i * 2;
}
}
return sum;
};
'Algorithm' 카테고리의 다른 글
[JavaScript] 프로그래머스 - 부족한 금액 계산하기 (1) | 2022.09.25 |
---|---|
[JavaScript] 문자열 내림차순으로 배치 (1) | 2022.09.25 |
[JavaScript] 프로그래머스 - 행렬의 덧셈 (0) | 2022.09.24 |
[JavaScript] 프로그래머스 - 내적 (1) | 2022.09.23 |
[JavaScript] 프로그래머스 - 없는 숫자 더하기 (1) | 2022.09.23 |