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(); | |
} | |
} |
문제
어떤 숫자 n이 자신을 제외한 약수들의 합으로 나타내어 지면, 그 수를 완벽한 수라고 한다.
예를 들어 6은 6 = 1 + 2 + 3 으로 완벽한 수이다.
n이 완벽한 수 인지 아닌지 판단해주는 프로그램을 작성하라.
입력
입력은 테스트 케이스마다 한 줄 간격으로 n이 주어진다. (2 < n < 100, 000)
입력의 마지막엔 -1이 주어진다.
출력
테스트케이스 마다 한줄에 하나씩 출력해야 한다.
n이 완벽한 수라면, n을 n이 아닌 약수들의 합으로 나타내어 출력한다(예제 출력 참고).
이 때, 약수들은 오름차순으로 나열해야 한다.
n이 완벽한 수가 아니라면 n is NOT perfect. 를 출력한다.
'IT > 알고리즘' 카테고리의 다른 글
BOJ 백준온라인져지 2578 빙고 풀이 (0) | 2018.03.15 |
---|---|
BOJ 백준온라인져지 2576 홀수 풀이 (0) | 2018.03.15 |
BOJ 백준온라인져지 1094 막대기 풀이 (0) | 2018.03.13 |
BOJ 백준온라인져지 15562 네트워크 풀이 (0) | 2018.03.13 |
BOJ 백준온라인져지 15565 귀여운 라이언 풀이 (0) | 2018.03.11 |