[백준] 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 11 | 104 ms | 14048 KB | 891 B |
2. 구현 [C++]
| 언어 | 시간 | 메모리 | 코드 길이 |
|---|---|---|---|
| C++ 17 | 0 ms | 2020 KB | 704 B |
This post is licensed under CC BY 4.0 by the author.