각 자릿수를 더하는 문제는 빈번하게 출제되므로 꼭 익혀두는 것이 좋다.
public static class PS
{
public static void Main()
{
string ns = Console.ReadLine();
int n = int.Parse(ns);
for (int m = n - ns.Length * 9; m < n; m++)
{
if (Sum(m) == n)
{
Console.Write(m);
return;
}
}
Console.Write(0);
}
private static int Sum(int n)
{
int sum = n;
while (n > 0)
{
sum += n % 10;
n /= 10;
}
return sum;
}
}
이 문제를 풀다보면 문득 드는 생각이 하나 있다. 생성자의 범위를 어떻게 지정해야 하는가?
물론 그냥 풀어도 상관은 없다. 정답 처리는 되므로...
그러나 n의 범위가 [1, 1000000] 인데, 이를 1부터 계산하는건 상당히 찝찝한 일이 아닐 수 없다.
스스로 한번 생각해보자. 참고로 나는 n에서 n의 길이 * 9를 뺀 수부터 계산했다.
(개인차가 있겠지만 큰 의미는 없을 것이니 너무 깊게 생각하지는 말자)
아무튼, 각자 생각한 범위 내에서 생성자의 분해합을 계속 구하고 n이 나온다면 이를 출력하면 된다.
여기서는 Sum 메소드가 분해합을 계산해주고 있다.
'백준 > 단계별' 카테고리의 다른 글
백준 1018 C#) 체스판 다시 칠하기 (0) | 2022.05.27 |
---|---|
백준 7568 C#) 덩치 (0) | 2022.05.25 |
백준 2798 C#) 블랙잭 (0) | 2022.05.24 |
백준 11729 C#) 하노이 탑 이동 순서 (0) | 2022.05.19 |
백준 17478 C#) 재귀함수가 뭔가요? (0) | 2022.05.12 |
댓글