소요시간 : 10분
문제
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤ left ≤ right ≤ 1,000
해석
주어진 left, right를 기준으로 for문을 돌린 후 약수의 갯수를 판별해 +, -를 해주면 되는 간단한 문제이다.
key point는 약수의 갯수를 어떻게 구할지 정하는 것 같다.
풀이
function solution(left, right) {
var answer = 0;
for(let i = left; i<=right; i++){
getDivisors(i) %2 == 0 ? answer+=i : answer-=i
}
return answer;
}
const getDivisors = (num) => {
const divisors = [];
for(let i = 1 ; i <= Math.sqrt(num) ; i++){
if(num % i === 0) {
divisors.push(i); if(num / i != i)
divisors.push(num / i);
}
}
// divisors.sort((a, b) => a - b);
return divisors.length;
}
복기
약수의 갯수를 구하는게 포인트 같은데 나는 함수를 사용했다.
다른 분의 풀이를 보니
Number.isInteger(Math.sqrt(i))
아래와 같이 조건식을 두었다.
제곱근이 정수이면 약수의 갯수가 홀수라고 한다.
이걸 어케아누ㅋㅋ
'생산성 > 코딩테스트' 카테고리의 다른 글
[프로그래머스: javascript] LV1(예산) (0) | 2022.05.08 |
---|---|
[프로그래머스: javascript] LV1(3진법 뒤집기) (0) | 2022.05.08 |
[프로그래머스: javascript] LV1(실패율) (0) | 2022.05.08 |
[프로그래머스: javascript] LV1(폰켓몬) (0) | 2022.05.08 |
[프로그래머스: javascript] LV1(모의고사) (0) | 2022.05.07 |