🧬알고리즘/Programmers
[JavaScript] 약수의 개수와 덧셈
뉴발자
2024. 9. 9. 18:28
728x90
문제
두 정수 left와 right가 매개변수로 주어진다.
left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고,
약수의 개수가 홀수인 수는 뺀 수를 반환하는 함수를 작성하라.
예시
left | right | return |
13 | 17 | 43 |
24 | 27 | 52 |
- 13의 약수는 [1, 13]이므로 더해준다.
- 14의 약수는 [1, 2, 7, 14]이므로 더해준다.
- 15의 약수는 [1, 3, 5, 15]으므로 더해준다.
- 16의 약수는 [1, 4, 16]이므로 빼준다.
- 17의 약수는 [1, 17]이므로 더해준다.
따라서, 결과값은 13 + 14 + 15 - 16 + 17인 43이 반환된다.
나의 풀이
function solution(left, right) {
let cnt = 0, result = 0;
for (let i = left; i <= right; i++) {
for (let j = 1; j <= i; j++) {
if (i % j === 0) {
cnt++;
}
}
cnt % 2 === 0 ? result += i : result -= i;
cnt = 0;
}
return result;
}
다른 풀이
function solution(left, right) {
var answer = 0;
for (let i = left; i <= right; i++) {
if (Number.isInteger(Math.sqrt(i))) {
answer -= i;
} else {
answer += i;
}
}
return answer;
}
풀이 방법
나의 풀이 방법
1. left 부터 right까지의 숫자의 약수를 구하기 위해 for() 문을 사용해서 반복해준다.
function solution(left, right) {
let cnt = 0, result = 0;
// 1
for (let i = left; i <= right; i++) {
...
}
}
2. 각 숫자의 약수의 개수를 구하기 위해 for() 문을 한번 더 사용해서 약수의 개수를 구한다.
function solution(left, right) {
let cnt = 0, result = 0;
// 1
for (let i = left; i <= right; i++) {
// 2
for (let j = 1; j <= i; j++) {
if (i % j === 0) {
cnt++;
}
}
}
}
3. 약수의 개수가 짝수일 경우 결과값에 더해주고, 홀수일경우 결과값에 빼준 후 cnt 변수를 초기화한다.
function solution(left, right) {
let cnt = 0, result = 0;
// 1
for (let i = left; i <= right; i++) {
// 2
for (let j = 1; j <= i; j++) {
if (i % j === 0) {
cnt++;
}
}
// 3
cnt % 2 === 0 ? result += i : result -= i;
cnt = 0;
}
return result;
}
다른 풀이 방법
1. for() 문을 사용해서 left부터 right까지 반복해준다.
function solution(left, right) {
var answer = 0;
// 1
for (let i = left; i <= right; i++) {
...
}
return answer;
}
2. 만약 제곱근이 정수이면 약수의 개수는 홀수가 되므로 결과값에서 빼주고, 정수가 아닌 경우 약수의 개수는 짝수가 되므로 더해준다.
function solution(left, right) {
var answer = 0;
// 1
for (let i = left; i <= right; i++) {
// 2
// 제곱근이 정수인 경우 = 약수의 개수가 홀수
if (Number.isInteger(Math.sqrt(i))) {
answer -= i;
} else {
answer += i;
}
}
return answer;
}
728x90