728x90
백준 단계별 문제풀이 9단계 (약수, 배수와 소수)
https://www.acmicpc.net/problem/9506
# 문제
어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다.
예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다.
n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.
# 예제
입력 : (2 < n < 100,000), 입력의 마지막엔 -1이 주어진다.
6
12
28
-1
출력
6 = 1 + 2 + 3
12 is NOT perfect.
28 = 1 + 2 + 4 + 7 + 14
# 필요개념
이 문제는 입력받은 수의 약수 중 자신을 제외한 수의 합을 구해 비교하고, 같으면 약수들을 뽑아내야 한다. 따라서 입력받은 수의 약수를 어딘가에 보관해야 한다는 뜻이다. 배열에 넣어도 되지만, 오랜만에 리스트를 사용하고 싶어서 써봤다!
✅ 리스트 메소드
내가 해당 문제에서 쓴 리스트의 메소드는 3개이다.
메소드 | 설명 |
add(obj o) | 객체 o를 리스트에 넣음 |
get(idx i) | i번째 원소의 값을 반환, 삭제 안 됨 |
clear() | 리스트를 null로 초기화함 |
이정도만 알아도 충분히 사용 가능하다.
추가로 while문을 사용할 때에는 break 조건을 꼭!! 신경써서 명시해야한다. (잘못하면 무한루프에 걸린다)
# Code
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);
List<Integer> lst = new ArrayList<>();
while(true) {
int a = sc.nextInt();
int sum = 0;
if (a == -1) break;
for (int i = 1; i < a ; i++) {
if (a % i == 0) {
lst.add(i);
sum += i;
}
}
if (sum == a) {
System.out.print(a + " = ");
for (int j = 0 ; j < lst.size() ; j++) {
if (j == lst.size() - 1) System.out.println(lst.get(j));
else System.out.print(lst.get(j) + " + ");
}
}
else System.out.println(a + " is NOT perfect.");
lst.clear();
}
}
}
print와 println을 용도에 맞게 눈치껏 사용해야한다는 거 잊지 말기 ..!
# 결과
'코딩테스트 > 백준 브론즈,실버' 카테고리의 다른 글
[백준] 10951 : A + B (EOF 처리하기) - JAVA (1) | 2024.01.26 |
---|---|
[백준] 2908 : 상수 (StringBuffer vs StringBuilder) - JAVA (0) | 2024.01.26 |
[백준] 2501 : 약수 구하기 (StringTokenizer 활용하기) - JAVA (1) | 2024.01.23 |
[백준] 11005 : 진법 변환2 (Stack활용하기, String으로 변환) - JAVA (1) | 2024.01.21 |
[백준] 2563 : 색종이 (Arrays.fill() 주의점) - JAVA (0) | 2024.01.17 |