반응형
입력받은 n의 약수들의 합을 구해 n이 완전수인지 아닌지 판별하는 문제.
입력 개수가 정해져있지 않으므로 while문을 사용해 n을 입력받는다.
n이 -1이라면 break문을 이용해 빠져나가게 한다.
int sum = 1;
String result = n + " = 1";
약수들의 합을 저장할 sum 변수와 결과를 출력할 result 변수이다.
출력에서처럼 + 기호를 출력하기 위해 sum은 1로 초기화하고, result변수에는 = 1 이라는 값으로 초기화했다.
1은 모든 수의 약수가 되기 때문에 반드시 포함될 것이기 때문.
이후 for문을 이용해 2부터 n / 2 까지 반복한다 (반복횟수를 줄이기 위해)
나머지가 0이면 약수라는 점을 이용해 약수를 sum 변수에 차례로 더해주고, result 변수에도 +기호와 함께 더해준다.
for (int i = 2; i <= n / 2; i++) {
if (n % i == 0) {
sum += i;
result += " + " + i;
}
}
반복문이 종료되면 약수들의합인 sum 변수와 처음 주어진 수 n을 비교하여
같다면 result를, 다르다면 n is NOT perfect 를 출력한다.
if (sum == n) {
System.out.println(result);
} else {
System.out.println(n + " is NOT perfect.");
}
완성.
전체 코드는 다음과 같다.
import java.util.Scanner;
public class Main {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
int n = 0;
while (true) {
n = sc.nextInt();
if (n == -1)
break;
int sum = 1;
String result = n + " = 1";
for (int i = 2; i <= n / 2; i++) {
if (n % i == 0) {
sum += i;
result += " + " + i;
}
}
if (sum == n) {
System.out.println(result);
} else {
System.out.println(n + " is NOT perfect.");
}
}
sc.close();
}
}
반응형
'Java > 백준알고리즘' 카테고리의 다른 글
[Java] 백준알고리즘 #14215 세 막대 (1) | 2023.10.06 |
---|---|
[Java] 백준알고리즘 #5073 삼각형과 세 변 (0) | 2023.10.06 |
[Java] 백준알고리즘 #2501 약수 구하기 (1) | 2023.10.05 |
[Java] 백준알고리즘 #2903 중앙 이동 알고리즘 (0) | 2023.10.05 |
[Java] 백준알고리즘 #2720 세탁소 사장 동혁 (2) | 2023.10.05 |