이전에도 주어진 수의 각 자릿수를 더하는 문제가 나왔었다. 이번엔 함수 단계인 만큼 함수를 통해 구현해보자.
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을 체크-출력해도 무방하다.
출력을 위해 따로 반복문을 작성할 필요가 없다는 뜻이다.
'백준 > 단계별' 카테고리의 다른 글
백준 1157 C#) 단어 공부 (0) | 2022.04.22 |
---|---|
백준 11720 C#) 숫자의 합 (0) | 2022.04.21 |
백준 4344 C#) 평균은 넘겠지 (0) | 2022.04.18 |
백준 2577 C#) 숫자의 개수 (0) | 2022.04.18 |
백준 10818 C#) 최소, 최대 (0) | 2022.04.18 |
댓글