알고리즘-2021/11/22

sanghun Lee·2021년 11월 23일
0

알고리즘

목록 보기
49/52
post-thumbnail

문제 설명

두 정수 left와 right가 매개변수로 주어집니다.

left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

1 ≤ left ≤ right ≤ 1,000

입출력 예

left right result
13 17 43
24 27 52

풀이

function find약수개수(num){
    let 약수 = [];
    for(let i =0; i < num; i ++){
        if(num%i === 0){
            약수.push(i)
        }
    }
    return 약수.length+1;
}

function solution(left, right) {
    let answer = 0;
    for(let i = left; i < right + 1; i++){
        const 약수개수 = find약수개수(i);
        
        약수개수 % 2 === 0 ? answer = answer + i : answer = answer - i
    }
    
    return answer ;
}

약수 개수를 찾는 별도의 함수를 만들어 활용했다.
다른분들의 풀이중 눈에 띄는 것은 수학공식인 제곱근이 정수일 때 약수의 개수가 홀수인 방식으로 푸신분의 풀이가 기억에 남는다.

공식을 이용하니 시간복잡도도 O(n)으로 작성할 수 있게 되는 방식이다

나는 오늘도 O(n^2)를 달리네 ㅎ..

참고

profile
알고리즘 풀이를 담은 블로그입니다.

0개의 댓글