알고리즘 풀이

[C#] 백준 4673번 문제풀이

bimtaeur30 2026. 3. 1. 16:34

문제번호: 4673

문제명: 셀프 넘버

문제링크: https://www.acmicpc.net/problem/4673

문제내용과 예제 입/출력은 위 문제 링크에서 확인해 주시기 바랍니다

해당 문제를 해결하는 과정에서 가장 핵심이 되는 부분은 d(n)을 어떻게 구현하느냐가 아닐까 생각이 됩니다. 개인적으로 전 그랬기 때문에 이 부분에 대해서 이야기를 해보겠습니다.
처음엔 각 숫자를 char로 분리시켜 int형으로 변환하고 각 자릿수를 더하는 방식이 떠올랐지만 이 방법은 실제로 사용된 방식에 비해 비효율적입니다. 전 그 방법 대신 sum과 temp변수를 i값으로 초기화시키고 temp에 10으로 나눈 나머지를 sum에 더해가는 방식으로 각 자릿수를 sum에 더해주었습니다.

그 후에는 bool배열에서 true를 찾을 때마다 그 인덱스 값을 출력시켜주었습니다.
다음은 정답코드입니다.

public static void Main()
{
    using StreamReader sr = new StreamReader(Console.OpenStandardInput());
    using StreamWriter sw = new StreamWriter(Console.OpenStandardOutput());

    bool[] bools = new bool[10001];
    for (int i = 1; i < 10001; i++)
    {
        int sum = i;
        int temp = i;

        while (temp > 0) // 각 자리의 숫자를 sum에 더하는 과정
        {
            sum += temp % 10; // 각 자리의 숫자를 더함
            temp /= 10; // 한자리씩 줄여나감
        }

        if (sum <= 10000)
        {
            bools[sum] = true;
        }
    }

    for (int i = 1; i < 10001; i++)
    {
        if (!bools[i])
        {
            sw.WriteLine(i);
        }
    }
}

 

'알고리즘 풀이' 카테고리의 다른 글

[C#] 백준 11004번 문제풀이  (0) 2026.03.03
[C#] 백준 27964번 문제풀이  (1) 2026.03.02
[C#] 백준 1991번 문제풀이  (0) 2026.02.28
[C#] 백준 2470번 문제풀이  (0) 2026.02.27
[C#] 백준 2467번 문제풀이  (0) 2026.02.26