JS-algorithm/프로그래머스
[프로그래머스] 약수의 개수와 덧셈 (javascript)
yunieyunie
2022. 6. 21. 15:38
https://programmers.co.kr/learn/courses/30/lessons/77884
코딩테스트 연습 - 약수의 개수와 덧셈
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주
programmers.co.kr
해결방법
1. i에 left를 담고 i는 right까지 1씩 증가시킨다
2. 1부터 i까지의 수로 i를 나눴을 때 나눈 나머지가 0이면 약수의 개수 divisor를 1씩 증가시킨다
3. divisor가 짝수면 sum에 더하고 홀수면 뺀다
풀이
function solution(left, right) {
var answer = 0;
for (let i = left; i <= right; i++ ){
let divisor = 0;
for (let j = 1; j <= i; j++ ){
if (i % j === 0) divisor++;
}
(divisor % 2 === 0) ? sum += i : sum -= i;
}
return answer;
}
배운 점
1. 제곱근이 정수면 약수의 개수는 홀수다
제곱근이 정수면 약수의 개수가 홀수라는 성질을 이용한 다른 분의 풀이를 발견했다
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;
}
i에 left부터 right까지 담는데 Number.isInteger를 이용해 i의 제곱근 즉, Math.squr(i)이 정수인지를 판별한다
정수라면 약수의 개수가 홀수이기 때문에 i를 빼주고 아니라면 짝수이기 때문에 더해주는 것이다
실제로 입출력 예1에서 13부터 17까지 중 제곱근이 정수인 16만 약수의 개수가 홀수이다
입출력 예2에서도 24부터 27까지 중 제곱근이 정수인 25만 약수의 개수가 홀수임을 알 수 있다