Post

[백준] 9506번 - 약수들의 합 [Java][C++]

[백준] 9506번 - 약수들의 합 [Java][C++]

문제 링크


1. 문제 풀이

주어진 수가 완전수인지 판단하는 문제로 완전수는 자기 자신을 제외한 약수의 합이 자기 자신이 되는 수이다. 약수는 $1$ 부터 주어진 수보다 작은 수까지 모든 수로 나누어서 나머지가 $0$ 이 되는지 판단하면 된다.


2. 코드

1. 구현 [Java]

String 을 타입 매개변수로 갖는 리스트를 활용해서 약수들을 찾은 후, 완전수면 String.join 메서드를 활용해서 출력 양식을 맞추는 방식으로 구현했다.

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
32
import java.io.*;
import java.util.*;

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

        while (true) {
            int n = Integer.parseInt(br.readLine());

            if (n == -1) break;

            List<String> list = new ArrayList<>();
            int sum = 0;
            for (int i = 1; i < n; i++) {
                if (n % i == 0) {
                    list.add(String.valueOf(i));
                    sum += i;
                }
            }

            if (sum == n) {
                sb.append(n).append(" = ").append(String.join(" + ", list)).append("\n");
            } else {
                sb.append(n).append(" is NOT perfect.\n");
            }
        }

        System.out.println(sb);
    }
}

2. 구현 [C++]

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
32
33
34
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    while (true) {
        int n;
        cin >> n;

        if (n == -1) break;

        vector<int> v;
        int sum = 0;
        for (int i = 1; i < n; i++) {
            if (n % i == 0) {
                v.push_back(i);
                sum += i;
            }
        }

        if (sum == n) {
            cout << n << " = ";
            for (int i = 0; i < v.size(); i++) {
                cout << v[i];
                if (i != v.size() - 1) cout << " + ";
            }
            cout << '\n';
        } else {
            cout << n << " is NOT perfect.\n";
        }
    }
}

3. 풀이 정보

1. 구현 [Java]

언어시간메모리코드 길이
Java 11104 ms14048 KB891 B

2. 구현 [C++]

언어시간메모리코드 길이
C++ 170 ms2020 KB704 B

This post is licensed under CC BY 4.0 by the author.