4673번 - 셀프 넘버 #구현

esc247·2022년 6월 30일
0

Algorithm

목록 보기
1/11

4673 셀프 넘버

셀프 넘버는 어떤 수에 그 각 자리 수를 더해 만들 수 있는 수가 아닌, 즉 생성자가 없는 수

처음에는 셀프 넘버가 11씩 증가하는 등차 수열인줄 알고 단순히 20 부터 11씩 더했는데,
생각보다 예외가 굉장히 많았다.

그래서 반대로 아예 1부터 10000까지 행렬을 채운 후
셀프 넘버를 찾아서 해당 인덱스에 0 대입했다.

이 방법을 처음부터 쓰지 않은 건, 셀프 넘버를 구하는게 힘들 거라 생각했는데 mod 연산자 쓰면 간단히 해결되는 문제였다.

#include <iostream>

using namespace std;

int main()
{
    int arr[10001] = {
        0,
    };
    for (int i = 1; i <= 10000; i++)
    {
        arr[i] = i;
    }
    arr[2] = arr[4] = arr[6] = arr[8] = arr[10] = arr[12] = arr[14] = arr[16] = arr[18] = 0;
    for (int i = 10; i < 100; i++)
    {
        int temp = i + i / 10 + i % 10;
        arr[temp] = 0;
    }
    for (int i = 100; i < 1000; i++)
    {
        int temp = i + i / 100 + (i % 100 / 10) + i % 10;
        arr[temp] = 0;
    }
    for (int i = 1000; i < 10000; i++)
    {
        int temp = i + i / 1000 + (i % 1000 / 100) + (i % 100 / 10) + i % 10;
        if (temp > 10000)
            continue;
        arr[temp] = 0;
    }

    for (int i = 1; i <= 10000; i++)
    {
        if (arr[i] == 0)
            continue;
        cout << arr[i] << '\n';
    }

    return 0;
}
profile
막상 하면 모르니까 일단 하자.

0개의 댓글