1. 자기자신을 제외한 약수의 최대값은 N / 2

2. 뭔가 값이 적을거라 생각되고 StringBuilder 같은거 사용안함.

3. 성공

import java.util.*;
import java.io.*;
/**
* https://www.acmicpc.net/problem/9506
* BOJ 백준온라인져지 9506 약수들의 합 풀이
*/
public class Main {
public static void main (String args[]) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
while (true) {
int N = Integer.parseInt(br.readLine());
if (N == -1) break;
ArrayList<Integer> list = new ArrayList<>();
for (int i = 1, temp = N / 2 + 1; i <= temp; i++) {
if (N % i == 0) {
list.add(i);
}
}
String str = "";
int tempN = N;
for (int i = 0, size = list.size(); i < size; i++) {
int n = list.get(i);
tempN -= n;
str += n;
if (i + 1 < size) {
str += " + ";
}
}
bw.write(N + " ");
if (tempN == 0) bw.write("= " + str);
else bw.write("is NOT perfect.");
bw.write("\n");
}
bw.flush();
}
}
view raw Main.java hosted with ❤ by GitHub

문제

어떤 숫자 n이 자신을 제외한 약수들의 합으로 나타내어 지면, 그 수를 완벽한 수라고 한다. 

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

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

입력

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

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

출력

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

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

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

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


+ Recent posts