[프로그래머스] level1. 약수의 개수와 덧셈

홈런볼·2023년 8월 13일

프로그래머스

목록 보기
31/36

문제링크

https://school.programmers.co.kr/learn/courses/30/lessons/77884

문제설명

두 정수 left와 right가 매개변수로 주어집니다. left부터 right까지의 모든 수들 중에서, 약수의 개수가 짝수인 수는 더하고, 약수의 개수가 홀수인 수는 뺀 수를 return 하도록 solution 함수를 완성해주세요.

제한사항

1 ≤ left right ≤ 1,000

로직

  1. left와 right 사이를 반복하면서 약수를 구한다
  2. 1부터 n까지 반복하며 약수를 구하는 것 보단 약수를 나눴을 때 약수가 나온다는 점을 파악하고 1부터 제곱근까지 반복하면서 약수를 구한다.
  3. 약수가 짝수면 해당 수를 더하고, 홀수면 해당수를 뺀다

문제풀이

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        
        for(int i=left;i<=right;i++){
            int cnt = getDivisorCount(i);
 
            if(cnt%2==0) answer+=i;
            else answer-=i;
        }
         return answer;
    }
    
    public int getDivisorCount(int num){
        int cnt = 0;
        for(int i=1;i<=Math.sqrt(num);i++){
            if(num % i == 0){
                cnt++;
                if(num / i != i) cnt++;
            }
        }
        return cnt;
    }
}

정확성 테스트

0개의 댓글