티스토리 뷰

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


제한사항

  • 1 ≤ left  right ≤ 1,000

입출력 예

leftrightresult

13 17 43
24 27 52

입출력 예 설명

입출력 예 #1

  • 다음 표는 13부터 17까지의 수들의 약수를 모두 나타낸 것입니다.

수약수약수의 개수

13 1, 13 2
14 1, 2, 7, 14 4
15 1, 3, 5, 15 4
16 1, 2, 4, 8, 16 5
17 1, 17 2
  • 따라서, 13 + 14 + 15 - 16 + 17 = 43을 return 해야 합니다.

입출력 예 #2

  • 다음 표는 24부터 27까지의 수들의 약수를 모두 나타낸 것입니다.

수약수약수의 개수

24 1, 2, 3, 4, 6, 8, 12, 24 8
25 1, 5, 25 3
26 1, 2, 13, 26 4
27 1, 3, 9, 27 4
  • 따라서, 24 - 25 + 26 + 27 = 52를 return 해야 합니다.

코드

class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        
        int count = 0;
        int num=left;

        do{
            for(int n =num ; n>=1 ;n--){
                if(num%n ==0){
                    count++;
                }
            }
            if (count %2 ==0){
                answer += num;
            }else{
                answer -=num;
            }
            //System.out.println("num: "+num);
            //System.out.println("count: "+count);
            num++;
            count =0;
        }while(num<=right);
        return answer;
    }
}

 

오랜만에 프로그래머스를 다시 풀어보는데 자력으로 술술 풀려서 기분이 좋았다.

약수 갯수를 count로 저장하여 count가 짝수일시 현재 숫자를 더하고

count가 홀수일시 현재 숫자를 빼주며

현재 숫자 num을 증가시키며 right와 같은 숫자가 되면 반복문이 끝내도록 했다.

 

이렇게 써놓으니 굉장히 쉬운 문제를 풀었구나 싶었다.

 

 

 

 

 

 

 

 

 

 

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함