728x90
#include <stdio.h>

int d(int n) {
    int sum = n;
    while (n > 0) {
        sum += n % 10;
        n /= 10;
    }
    return sum;
}

int main() {
    int num[10001] = { 0 };

    for (int i = 1; i <= 10000; i++) {
        if (d(i) <= 10000) num[d(i)] = -1;
    }
    for (int i = 1; i <= 10000; i++) {
        if (num[i] != -1) printf("%d\n", i);
    }
}

이 문제는 원리를 이해하고 푸는 문제다.

인터넷을 열심히 뒤져서 알아내고 이해하였다.

먼저 int d(int d)의 설명을 하자면

이 묶음이 셀프 넘버의 원리를 담았다고 볼 수 있다.

나누기와 나머지 구하기로 각 자릿수를 만들었다. 

그리고 나머지로 된 것을 sum으로 더해서 반환한다.

 

메인을 설명해보자면

num는 10000까지라고 했으므로 배열을 만들어놓았고

for문

왜 이 2번을 해야 하는지 모르겠어서 한번 elif로 시도했으나 돌아가지 않았다.

꼭 2번을 나누어서 해주어야 하는 것 같다.

 계속 반복해 주면서 i를 더해주는 것이고

d(i)가 함수를 의미하는 것으로 보인다.

함수 호출해서 sum이 10000이하이게 되면

num[d(i)]를 -1로 해주고 나면

다시 세준다.

그래서 -1이 아니라면

출력을 해주면 된다.

 

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

 

 

728x90

+ Recent posts