반응형
1. Scanner를 이용한 방법
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(true){
int n = sc.nextInt();
List<Integer> num = new ArrayList<Integer>();
int sum = 0;
if(n == -1){
break;
}
for(int i=1; i<=n; i++){
if(n % i == 0){
num.add(i);
}
}
num.remove(num.size()-1);
for(int i = 0; i<num.size(); i++){
sum += num.get(i);
}
if(sum == n){
System.out.print(sum + " = ");
for(int j=0; j<num.size(); j++){
System.out.print(num.get(j));
if(j == num.size()-1){
System.out.println();
break;
}
else{
System.out.print(" + ");
}
}
}
else if(n != sum){
System.out.println(n + " is NOT perfect.");
}
}
sc.close();
}
}
2. BufferedReader를 이용한 방법
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class Main{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true){
int n = Integer.parseInt(br.readLine());
List<Integer> num = new ArrayList<Integer>();
int sum = 0;
if(n == -1){
break;
}
for(int i=1; i<=n; i++){
if(n % i == 0){
num.add(i);
}
}
num.remove(num.size()-1);
for(int i = 0; i<num.size(); i++){
sum += num.get(i);
}
if(sum == n){
System.out.print(sum + " = ");
for(int j=0; j<num.size(); j++){
System.out.print(num.get(j));
if(j == num.size()-1){
System.out.println();
break;
}
else{
System.out.print(" + ");
}
}
}
else if(n != sum){
System.out.println(n + " is NOT perfect.");
}
}
}
}
코드를 좀 더 간단하게 하고 싶었는데 풀다보니 너무 길어져서 아쉽다.
num.remove(num.size()-1); 를 이용해서 약수 리스트의 마지막 index를 없애버리는 식으로 했다.
+ 반복을 제외하는 조건 방법이 헷갈려서 고민하느라 시간이 좀 걸렸다..
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2581 - 소수 (JAVA/ 자바) (0) | 2024.04.08 |
---|---|
[백준] 1978 - 소수 찾기 (JAVA/ 자바) (0) | 2024.04.06 |
[백준] 2501 - 약수 구하기 (JAVA/ 자바) (0) | 2024.04.04 |
[백준] 5086 - 배수와 약수 (JAVA/ 자바) (0) | 2024.04.01 |
[백준] 2869 - 달팽이는 올라가고 싶다 (JAVA/ 자바) (0) | 2024.04.01 |