반응형
문제 설명
두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.
function solution(left, right) {
var answer = 0;
let arr = [];
let arr1 =[];
for(let i =left;i<=right;i++){
arr.push(k(i));
arr1.push(i);
}
for(let i=0;i<arr.length;i++){
if(arr[i]%2 === 0){
answer+=arr1[i];
}else{
answer-=arr1[i];
}
}
return answer;
}
function k(n){
let cnt = 0;
for (let i = 1; i * i <= n; i++) {
if (n % i == 0) {
cnt++;
if (i * i < n) cnt++;
}
}
return cnt;
}
array에 범위의 숫자를 정의하고 약수를 구하는 함수를 따로 구현한 뒤 약수가 짝수이면 answer에 더하고 홀수이면 빼주었습니다. 약수의 개수를 구하는 것을 조금 더 효율적으로 풀기 위해 수의 범위를 해당 숫자의 반으로 했습니다.
+풀이 방법 추가
제곱근이 정수이면 약수의 개수가 홀수인 것으로 푸신분이 있네요 대박!!!!
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;
}
반응형
'혼자 공부하는 것들 > 알고리즘' 카테고리의 다른 글
200. Number of Islands (leetcode python) +DFS로 풀기 (0) | 2021.10.29 |
---|---|
2. Add Two Numbers (leetcode python) (0) | 2021.10.27 |
유클리드 호제법 (최대공약수, +최소공배수) (0) | 2021.10.03 |
에라토스테네스의 체 (0) | 2021.09.02 |
[프로그래머스] 숫자 문자열과 영단어 (2021 카카오 채용연계형 인턴십) (0) | 2021.08.28 |
댓글