백준/단계별

백준 4673 C#) 셀프 넘버

alpacadabra 2022. 4. 19. 00:38

이전에도 주어진 수의 각 자릿수를 더하는 문제가 나왔었다. 이번엔 함수 단계인 만큼 함수를 통해 구현해보자.

 

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

//Main
StreamWriter sw = new (new BufferedStream(Console.OpenStandardOutput()));
bool[] flags = new bool[10001];
int dn;

for (int n = 1; n < 10001; n++)
{
    dn = d(n);
    
    if (dn < 10001)
        flags[dn] = true;
    
    if (!flags[n])
        sw.WriteLine(n);
}

sw.Close();

 

함수 d는 생성자 n을 통해 새로운 숫자를 생성해주는 함수이다.

이 함수를 통해 생성된 숫자는 모두 flags 배열에 true로 기록되도록 했다.

즉 flags 배열에서 false 값을 갖는 숫자는 모두 셀프 넘버이고, 이를 체크하여 출력하면 된다.

 

포인트가 있다면, 여기서 n은 항상 dn보다 작으므로 dn을 생성하면서 n을 체크-출력해도 무방하다.

출력을 위해 따로 반복문을 작성할 필요가 없다는 뜻이다.