본문 바로가기

자바(JAVA)/자료구조 & 알고리즘

백준 9506번 자바 약수들의 합

백준 9506번 약수들의 합 문제

 

 

 

 

백준 9506번 자바 약수들의 합 풀이

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Main {

	public static void main(String[] args) throws Exception {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

		StringBuilder sb = new StringBuilder();

		while (true) {

			int n = Integer.parseInt(br.readLine());

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

			ArrayList<Integer> divisorList = divisorList(n);

			int sum = 0;

			String plusStr = "";

			for (int divisorNum : divisorList) {

				if (divisorNum != divisorList.get(divisorList.size() - 1)) {

					sum = sum + divisorNum;

					plusStr += divisorNum == 1 ? "" + divisorNum : " + " + divisorNum;

				}

			}

			if (sum == divisorList.get(divisorList.size() - 1)) {

				sb = sb.append(n).append(" = ").append(plusStr).append("\n");

			} else {

				sb = sb.append(n).append(" is NOT perfect.").append("\n");

			}

		}

		System.out.println(sb);

	}
	
	public static ArrayList<Integer> divisorList(int num) {

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

		int sqrt = (int) Math.sqrt(num);

		for (int i = 1; i <= sqrt; i++) {

			if (num % i == 0) {

				divisorList.add(i);

				if (num / i != i) {

					divisorList.add(num / i);

				}

			}

		}

		divisorList.sort(Comparator.naturalOrder());

		return divisorList;

	}
}