갓비니

2020/04/12 코딩 문제 연습 (7단계 / 백준 4673번, 생성자와 셀프넘버) C++ 본문

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 < 10return n; // 주어진 수가 한자리일 때
    else if(n<100)  return (n / 10+ (n % 10); // 주어진 수가 두자리일 때
    else if (n < 1000return ((n / 100+ d(n % 100)); // 주어진 수가 세자리일 때
    else if (n < 10000return (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 이라는 값을 출력해버린다. 뭔가 꼬여버린다는 것이다.

 

고심의 흔적