반응형
https://www.acmicpc.net/problem/9506
import java.io.*;
import java.util.*;
public class Main {
static int stoi(String s) {
return Integer.parseInt(s);
}
static int N;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while (true) {
N = stoi(br.readLine());
if (N == -1) {
break;
}
List<Integer> divisors = getDivisors();
if (divisors.isEmpty()) {
sb.append(N).append(" is NOT perfect.").append("\n");
continue;
}
sb.append(N).append(" = ");
for (int i = 0; i < divisors.size() - 1; i++) {
sb.append(divisors.get(i)).append(" + ");
}
sb.append(divisors.get(divisors.size() - 1)).append("\n");
}
System.out.println(sb);
}
static List<Integer> getDivisors() {
List<Integer> list = new ArrayList<>();
for (int i = 1; i < N; i++) {
if (N % i == 0) {
list.add(i);
}
}
int sum = list.stream().mapToInt(Integer::intValue).sum();
return sum == N ? list : List.of();
}
}
약수는 영어로 divisor 이다.
getDivisors 메서드로 약수 리스트를 받아온 뒤, 비어있다면 완전수가 아니고, 안 비어있다면 완전수여서 약수 리스트를 받도록 했다.
약수는 N에 대하여 N 미만의 약수의 합이 N일 때이므로, 나머지가 0인 수를 모아서 그 합을 구한 뒤, N과 같으면 그 리스트를 그대로, 아니라면 빈 리스트를 리턴했다.
그 다음 StringBuilder로 넣어서 마지막에 출력해주었다.
반응형
'알고리즘 🤔' 카테고리의 다른 글
[프로그래머스 자바] 단속카메라 (Lv.3) (1) | 2024.06.05 |
---|---|
[백준 자바 2935] 소음 (브론즈3) (0) | 2024.06.02 |
[프로그래머스 자바] 여행경로 (Lv.3) (0) | 2024.05.31 |
[백준 자바 10811] 바구니 뒤집기 (브론즈2) (0) | 2024.05.30 |
[백준 자바 2953] 나는 요리사다 (브론즈3) (0) | 2024.05.29 |