Jakorithm
article thumbnail
728x90

문제

https://www.acmicpc.net/problem/9506

 

9506번: 약수들의 합

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

www.acmicpc.net

 

 

코드

각 줄마다 정수 n이 주어질 때, n이 완전수라면, n이 아닌 약수들의 합으로 나탄내어 출력한다. (입력의 마지막엔 -1이 주어진다.)

  • 완전수 : 어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같은 수
  • 완전수가 아니라면 n is NOT perfect.를 출력한다.
  • 약수들을 나열할 때, 오름차순으로 나열해야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        while (true) {
            int n = Integer.parseInt(br.readLine());

            if (n == -1) {
                break;
            }

            // 약수를 담기 위한 리스트
            List<Integer> divisorList = new ArrayList<>();
            // 약수들의 합
            int sum = 0;

            // 리스트에 약수들을 담으면서 합 구하기
            for (int i = 1; i < n; i++) {
                if (n % i == 0) {
                    sum += i;
                    divisorList.add(i);
                }
            }

            StringBuilder sb = new StringBuilder();
            sb.append(n);
            // 완전수인 경우
            if (sum == n) {
                sb.append(" = ");

                for (int i : divisorList) {
                    sb.append(i).append(" + ");
                }

                sb.delete(sb.length() - 3, sb.length());
            // 완전수가 아닌 경우
            } else {
                sb.append(" is NOT perfect.");
            }

            System.out.println(sb);
        }
    }
}
728x90