문제번호: 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 |