Algorithm/문제
programmers. 약수의 개수와 덧셈
Yuclid
2021. 6. 14. 17:25
문제
코딩테스트 연습 - 약수의 개수와 덧셈
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주
programmers.co.kr
풀이
left 부터 right 까지 반복문을 돌리면서 해당 수의 약수의 개수를 확인하고 짝수면 더하기 홀수면 빼기 해주면 된다
코드
function solution(left, right) {
var answer = 0;
for(let i=left; i<=right;i++){
if(getPrimeCnt(i)%2===0) answer+= i;
else answer -= i;
}
function getPrimeCnt(number){
let cnt = 0;
for(let i=1;i<=number;i++){
if(number%i===0) cnt++;
}
return cnt;
}
return answer;
}
리팩토링
기존에 풀었던 코드에서는 number의 약수를 1부터 number까지 다 구하고 짝수 홀수를 판별했는데
제곱수가 아닌 수들은 전부 약수의 개수가 짝수이다 그렇기 때문에 약수를 모두 구할 필요가 없는 것
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;
}