[JAVA] 약수의 개수와 덧셈 - Lv.1

태히·2022년 10월 15일
0

코딩테스트 연습

목록 보기
9/9


문제

문제 링크 : https://school.programmers.co.kr/learn/courses/30/lessons/77884

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

생각 생각

N의 약수의 개수를 구할 때 반복 횟수는 1부터 N까지 for문을 모두 순회하는 것이 아니라 N의 제곱근 만큼 반복하면 된다.
-> N의 약수의 개수를 구하기 위한 반복 횟수 = Math.sqrt(N)

약수의 개수가 짝수인 수 - Math.sqrt(N) != 0
약수의 개수가 홀수인 수 - Math.sqrt(N) == 0

코드

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

풀이

위에서 말했다 싶이 반복문은 left~right 만큼 순회하고,
약수의 개수가 짝수인경우(Math.sqrt(N) !=0)에는 answer에 더해주고, 약수의 개수가 홀수인 수(Math.sqrt(N) == 0)에는 answer에 값은 빼준다.

REVIEW

문제를 천천히 읽고 깊이 생각해보면 해결책은 쉽게 나온다. 문제를 쓱 보고 간단하다고 쉬운문제라고 판단하지 말자.

profile
하고싶은게 많은 개발자가 되고싶은

0개의 댓글