Java/백준알고리즘

[Java] 백준알고리즘 #9506 약수들의 합

Sehyeok20 2023. 10. 5. 19:50
반응형

백준알고리즘 #9506 약수들의 합

입력받은 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();
    }
}
반응형