[백준] 9506번 약수들의 합 Java 문제 풀이

2023. 3. 20. 18:21알고리즘/백준

728x90
반응형

문제풀이

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

interface Main {
    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        int n = Integer.parseInt(br.readLine()), sum = 0;
        while(n != -1) {
            sb.setLength(0);
            sb.append(n + " = 1");
            sum = 1;
            for(int i=2; i<n; i++) {
                if(n%i==0) {
                    sb.append(" + " + i);
                    sum += i;
                }
            }
            if(sum == n) {
                System.out.println(sb);
            } else {
                System.out.println(n + " is NOT perfect.");
            }
           n = Integer.parseInt(br.readLine());
        }
    }
}

1 포함, 자신을 제외한 약수들의 합이 자신과 같을 경우 완전수입니다.

 

약수일 경우 sum에 값들을 저장하고 반복이 끝났을 때 n과 sum을 비교하여 같으면 반복하며 StringBuilder에 저장한 값들을 출력해줍니다.

같지 않을 경우 N is NOT perfect.를 출력합니다.

 

StringBuilder를 초기화할 땐 setLength(0)을 해줬습니다.

 

모든 수의 약수에는 1이 포함되므로

sum에는 1을 고정으로 저장하고,

sb에는 "n = 1"을 고정으로 저장했습니다. 약수가 있을 경우 sb += "+ 약수" 이렇게만 해주면 됩니다.

 

출처 : https://www.acmicpc.net/problem/9506

 

9506번: 약수들의 합

어떤 숫자 n이 자신을 제외한 모든 약수들의 합과 같으면, 그 수를 완전수라고 한다. 예를 들어 6은 6 = 1 + 2 + 3 으로 완전수이다. n이 완전수인지 아닌지 판단해주는 프로그램을 작성하라.

www.acmicpc.net

 

728x90
반응형