백준

[JAVA] 백준 9506번 약수들의 합

DEV장화 2023. 3. 29. 15:09
728x90
반응형
문제

 

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.

예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.

n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

 

 

입력

 

입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100,000)

입력의 마지막엔 -1이 주어진다.

 

 

출력

 

 

테스트케이스 마다 한줄에 하나씩 출력해야 한다.

n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).

이때, 약수들은 오름차순으로 나열해야 한다.

n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.

 

 

풀이
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        ArrayList<Integer> list = new ArrayList<>();

        for (int i = 0; i < 9999; i++) {
            int a = scanner.nextInt();

            // list 비워주기. 전에 넣은 배열들 삭제.
            list.clear();
            // -1 이면 for문 끝내기.
            if (a == -1){
                break;
            }

            // 약수구하기
            for (int j = 1; j < a; j++) {
                if (a%j==0){
                    list.add(j);
                }
            }

            // list 안에 있는 배열들의 총 합 구하기
            int sum = 0;
            for (int j = 0; j < list.size(); j++) {
                sum += list.get(j);
            }

            // 총합과 a를 비교하여 완전수인지 아닌지 구분
            if (a == sum){
                System.out.print(a + " = ");
                for (int j = 0; j < list.size(); j++) {
                    System.out.print(list.get(j));
                    for (int k = 0; k < 1; k++) {
                        if (j == (list.size()-1)){
                            break;
                        }
                        System.out.print(" + ");
                    }
                }
                System.out.println();
            }else {
                System.out.println(a + " is NOT perfect.");
            }
        }
    }
}
728x90
반응형