본문으로 바로가기

📘문제 설명

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

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

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


📌 제한조건

  • 1 ≤ left  right ≤ 1,000

💡 개념 설명

  1. 반복 범위: left부터 right까지의 모든 정수를 순회하는 외부 반복문(for-loop)을 만듭니다.
  2. 약수의 개수 계산: 외부 반복문 내에서 현재 수(num)의 약수 개수를 세는 내부 로직을 실행합니다. 약수 개수를 세는 가장 간단한 방법은 1부터 num까지 나누어 떨어지는지 확인하는 것입니다.
  3. 짝수/홀수 판별 및 합산: 약수의 개수가 계산되면,
    • 개수가 짝수이면 현재 수(num)를 최종 결과에 더합니다.
    • 개수가 홀수이면 현재 수(num)를 최종 결과에서 뺍니다.
  4. 반환: 모든 순회가 끝난 후 최종 합계(answer)를 반환합니다.

📎 입출력 예시

 


📎 코드

public class Solution {
    public int solution(int left, int right) {
        int answer = 0;
        
        for (int num = left; num <= right; num++) {
            int count = 0; 
            
            // 약수의 개수를 세는 루프
            for (int i = 1; i <= num; i++) {
                if (num % i == 0) {
                    count++;
                }
            }
            
            // 약수 개수에 따라 더하거나 빼기
            if (count % 2 == 0) {
                answer += num;
            } else {
                answer -= num;
            }
        }
        
        return answer;
    }

    public static void main(String[] args) {
        Solution sol = new Solution();

        // 테스트 케이스
        int left1 = 13;
        int right1 = 17;
        int left2 = 24;
        int right2 = 27;

        System.out.println("13부터 17까지 결과: " + sol.solution(left1, right1)); // 예상 출력: 43
        System.out.println("24부터 27까지 결과: " + sol.solution(left2, right2)); // 예상 출력: 52
    }
}

 


📎 결과