최대 1 분 소요

문제 링크

풀이 과정

단순하게 답을 구했다.

입력받은 값 N의 생성자가 무조건으로 가져야 하는 조건은 N보다 작아야한다.
그러므로 0부터 N까지의 for문을 실행하여 가장 먼저 발견된 생성자를 출력하였다.

다음과 같은 방식으로 구현하였다.

for (int i = 0; i < N; i++)
{
    int sum = ... // 분해합을 구함

    // N의 생성자라면
    if(sum == N)
    {
        ...
    }
}


분해합을 구하는 과정에서 자릿수들의 합을 구하는 부분만 따로 함수로 구현하여 코드를 작성했다.
다음 함수는 매개변수 n을 입력받아 n의 자릿수의 모든 합을 구해 return한다.

public static int GetTotalDigit(int n)
{
    int sum = 0;
    while (n > 0)
    {
        sum += n % 10;
        n = n / 10;
    }

    return sum;
}

전체 코드

class Program
{
    static void Main(string[] args)
    {
        int N = int.Parse(Console.ReadLine());

        // 생성자
        int con = 0;

        for (int i = 0; i < N; i++)
        {
            int sum = i + GetTotalDigit(i);

            // N의 생성자라면
            if(sum == N)
            {
                con = i;
                break;
            }
        }

        // 생성자 출력
        Console.WriteLine(con);
    }
    
    public static int GetTotalDigit(int n)
    {
        int sum = 0;
        while (n > 0)
        {
            sum += n % 10;
            n = n / 10;
        }

        return sum;
    }
}

댓글남기기