문제 자체는 쉬웠지만, 문제 해석을 잘못 해석해 애먹은 문제였다..!
먼저 내가 생각한 로직은 이렇다.
while(n < 0)
n % i == 0 -> ArrayList 적재
for (sum += ArrayList.get(i))
sum == num -> 약수 합 출력
sum != num -> n is NOT perfect 출력
해당 로직을 보면 알다시피 완전수를 구하는 문제였는데, 필자는 그냥 테스트 케이스만 보고 순서대로 반복문으로 약수의 누적합을 비교해서 출력해 버린 것이었다! (맙소사,,)
먼저 내가 처음 작성한 코드다.
import java.io.*;
import java.util.*;
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());
int sum = 0;
int count = 0;
ArrayList<Integer> arr = new ArrayList<>();
if (n == -1)
break;
for (int i = 1; i < n; i++) {
if (n % i == 0)
arr.add(i);
}
for (int i = 0; i < arr.size(); i++) {
sum += arr.get(i);
count++;
if (sum > n) {
System.out.println(n + " is NOT perfect.");
break;
}
else if (sum == n) {
System.out.print(n + " = " + arr.get(0));
for (int j = 1 ; j < count; j++)
System.out.print(" + " + arr.get(j));
System.out.println();
break;
}
}
}
}
}
다행히도 다음날 백준 고수 선생님들의 반례를 듣게 되었고, 그 반례를 고민하다가 완전수를 배제한 것을 알게 되었다..!
[최종코드]
import java.io.*;
import java.util.*;
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());
int sum = 0;
int count = 0;
ArrayList<Integer> arr = new ArrayList<>();
if (n == -1)
break;
for (int i = 1; i < n; i++) {
if (n % i == 0 || n == 1)
arr.add(i);
}
for (int i = 0; i < arr.size(); i++) {
sum += arr.get(i);
count++;
}
if (sum == n) {
System.out.print(n + " = " + arr.get(0));
for (int j = 1 ; j < count; j++)
System.out.print(" + " + arr.get(j));
System.out.println();
}
else
System.out.println(n + " is NOT perfect.");
}
}
}
배운점
해당 문제를 꼼꼼히 읽는 습관을 가져야겠다고 생각 들었다!
'코딩테스트 > 백준' 카테고리의 다른 글
[백준 JAVA] 1929 - 소수 구하기 (0) | 2024.12.04 |
---|---|
[백준 JAVA] 1978 - 소수 찾기 (0) | 2024.12.04 |
[백준 JAVA] 2501 - 약수 구하기 (0) | 2024.12.03 |
[백준 JAVA] 5086 - 배수와 약수 (0) | 2024.12.02 |
[백준 JAVA] 2745 - 진법 변환 (0) | 2024.12.02 |