문제
풀이
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;
}
'Algorithm > 문제' 카테고리의 다른 글
programmers. 2개 이하로 다른 비트 (0) | 2021.06.19 |
---|---|
programmers. 행렬 테두리 회전하기 (0) | 2021.06.16 |
programmers. 음양 더하기 (0) | 2021.06.13 |
programmers. 로또의 최고 순위와 최저 순위도움말 (0) | 2021.06.11 |
baekjoon. 생태학 (0) | 2021.06.08 |