Programming/코딩 문제 풀이
2020/04/12 코딩 문제 연습 (7단계 / 백준 4673번, 생성자와 셀프넘버) C++
갓비니
2020. 4. 13. 00:46
<4673번>

여기서 셀프넘버란
어떤 수와 어떤 수의 합으로 만들어질 수 없는 수를 뜻한다.
예를들어 1은 -> 어떤 수의 합으로 만들어 질 수 없다.
2는 -> 1+1 으로 만들어질 수 있다 / 1은 2의 생성자이다.
3은 -> 불가능
4는 -> 2+2로 가능 / 2는 4의 생성자이다.
.
.
.
==> 재료가 되는 수가 없는 수 : 셀프 넘버
예를 들어, 2나 4는 재료가 있으니까 셀프넘버가 아님.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#include<iostream>
using namespace std;
int d(int n);
int main() {
int is_selfnum[100000] = { 0 };
for (int i = 1; i < 10000; i++) {
is_selfnum[i+d(i)]++;
}
for (int i = 1; i < 10000; i++) {
// printf("is_selfnum[%d]=%d\n", i, is_selfnum[i]);
if ((is_selfnum[(i)]) == false)printf("%d\n", i);
}
}
int d(int n) {
if (n < 10) return n; // 주어진 수가 한자리일 때
else if(n<100) return (n / 10) + (n % 10); // 주어진 수가 두자리일 때
else if (n < 1000) return ((n / 100) + d(n % 100)); // 주어진 수가 세자리일 때
else if (n < 10000) return (n / 1000) + d((n % 1000)); //주어진 수가 네자리일 때
}
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
|
처음에 12번째 라인에서, if ((is_selfnum[d(i)]) == false)printf("%d\n", i);
로 해놓고 왜 안되지? 이러고 있었다.....
d(i)가 아니라 i를 넣었어야 하는건데...
예를들어 잘못 출력된 10의 경우 생성자를 가지지 못한 친구인데
is_selfnum[d(10)]이면 ->020 이라는 값을 출력해버린다. 뭔가 꼬여버린다는 것이다.
