home > algorithm > baekjoon > [baekjoon] 약수들의 합 (백준 9506 java 풀이)

[baekjoon] 약수들의 합 (백준 9506 java 풀이)
algorithm baekjoon step9

intro : 완전수를 검증하기위해서는 주어진 값을 본인을 제외한 1부터의 값으로 나누어보면서 나머지가 0인값을 따로 체크하여 주어진 변수와 같은 값인지 비교하는게 포인트

백준 문제링크

문제

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

입력

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

출력

테스트케이스 마다 한줄에 하나씩 출력해야 한다. n이 완전수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고). 이때, 약수들은 오름차순으로 나열해야 한다. n이 완전수가 아니라면 n is NOT perfect. 를 출력한다.

문제 풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int number;
        while ((number = Integer.parseInt(br.readLine())) != -1) {
            isPerfect(number);
        }
    }

    public static void isPerfect(int number) {
        StringBuilder sb = new StringBuilder();
        int result = 0;
        for (int i = 1; i < number; i++) {
            if (number % i == 0) {
                sb.append(i).append(" + ");
                result += i;
            }
        }
        if (result == number) {
            String subStr = sb.substring(0, sb.length() - 3);
            System.out.println(number + " = " + subStr);
        } else {
            System.out.println(number + " is NOT perfect.");
        }
    }
}