1. 자기자신을 제외한 약수의 최대값은 N / 2
2. 뭔가 값이 적을거라 생각되고 StringBuilder 같은거 사용안함.
3. 성공
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |