Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

luke

[백준] - 약수들의 합 (9506) (자바/Java) 본문

알고리즘문제/백준 문제(Java)

[백준] - 약수들의 합 (9506) (자바/Java)

luke-king 2024. 3. 27. 12:30

 

 

 

 

 

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

 

9506번: 약수들의 합

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

www.acmicpc.net

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

 

풀이.


 

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);

        while (true) {
            int N = sc.nextInt();
            
            int[] arr = new int[N];
            int res = 0;
            int index = 0;

            if (N == -1) {
                break;
            }

            for (int i = 1; i < N; i++) {
                if (N % i == 0) {
                    arr[index++] = i;
                    res += i;
                }
            }

            if (res != N) {
                System.out.println(N + " is NOT perfect.");
                continue;
            }


            System.out.print(N + " = ");
            for (int i = 0; i < index; i++) {

                if(i == index-1)
                    System.out.print(arr[i]);
                else
                    System.out.print(arr[i] + " + ");
            }
            System.out.println();
        }
        sc.close();

    }
}

 

이번 문제는 약수들의 합을 구하는 문제다!

출력만 봐서는 살짝,,?겁먹을수도 있지만 크게 어렵지는 않다!

바로 풀이 해보겠다.

 

1. while문으로 시작한다. 문제를 보면 -1을 입력했을때 더이상 출력이 나오지 않아 break를 걸어준다.

 

2. 이제 약수를 담을 배열과, 약수들의 합 변수(res), 약수를 찾을 변수(index)를 만들어 준다.

 

3. 약수를 구하기 위한 로직을 통해 약수일 경우 약수를 찾을 변수(index)를 1씩 증가시켜 배열에 담아준다.

 

4. 약수의 합을 구하기 위해 3번 조건에 충족 할때마다 더해준다.

 

5. 약수 합과 입력한 값이 다르다면 " is NOT perfect. " 라는 문구 출력 조건 식을 만든다.

 

6. 마지막으로 약수들을 찾을때마다 증가했던 index변수 수 만큼 돌려 출력해주면 끝이다.