🎍 문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
🎍 제한 조건
- 1 ≤ left ≤ right ≤ 1,000
🎍 입출력 예
left | right | result |
13 | 17 | 43 |
24 | 27 | 52 |
🎍 나의 문제 풀이
function div(num) {
let count = 0;
for (let i = 0; i <= num; i++) {
if (num % i == 0) {
count++;
}
}
return count;
}
function solution(left, right) {
let answer = 0;
for (let i = left; i <= right; i++) {
let tmp = div(i);
tmp % 2 === 0 ? (answer += i) : (answer -= i);
}
return answer;
}
간단하게 div라는 약수의 개수를 구하는 함수를 만들어준 후에, left부터 right까지 약수가 짝수면 더해주고, 홀수면 빼주는 함수를 적용해서 문제를 풀었다.
🎍 다른 문제 풀이
👉 제곱근의 성질이용
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;
}
약수의 개수는 기본적으로 짝수인데, 어떤 수의 제곱인 경우(제곱근)에만 약수의 개수가 홀수임을 이용하여 풀어줌.
약수는 원래 나누어 떨어지는 수이므로 각각 곱해서 원래 수가 되는 짝이 있다. 하지만 제곱수인 경우는 자기 자신을 두 번 곱하기 때문에 약수가 홀수가 되는 것이다.
🟦 math.sqrt()
math.sqrt() :루트를 씌워주는 함수
'알고리즘' 카테고리의 다른 글
[프로그래머스 / 코딩테스트 연습] 두 개 뽑아서 더하기-자바스크립트(javascript) (0) | 2023.04.12 |
---|---|
[프로그래머스 / 코딩테스트 연습] 최소 직사각형 -자바스크립트(javascr (0) | 2023.04.11 |
[프로그래머스 / 코딩테스트 연습] 완주하지 못한 선수-자바스크립트(javascript) (0) | 2023.04.10 |
[프로그래머스 / 코딩테스트 연습] 수박수박수박수박수박수?-자바스크립트(javascript) (0) | 2023.04.10 |
[프로그래머스 / 코딩테스트 연습] 문자열 다루기 기본-자바스크립트(javascript) (1) | 2023.04.10 |
댓글