[C#] 분해합

소슬잎·2023년 11월 25일

백준 문제

https://www.acmicpc.net/problem/2231

풀이 후기

1. 분석

B2 문제라도 1~n 찾는 건 좀 재미없어서 추가 조건을 연구해봤다.

생성자 X가 3자리의 수라면, X + X[0] + X[1] + X[2]가 나온다. 여기서 X[?]의 최솟값은 1, 최댓값은 9다. 그리고 해당 수는 무조건 더해야 하므로 최대로 더했을 때, 최소로 더했을 때 목표 숫자가 나오는지 확인하면 된다.

즉 3자리의 수는 자기 수에서 (3 ~ 27) 사이의 값이 더해졌을 때 목표 숫자가 나와야 한다. => N - (자릿수 * 9)부터 확인하자.

2. 실행 결과

3. 코드

using System;
using System.Linq;

class Baekjoon
{
    public void Solution(int n)
    {
        var start = n - 9 * n.ToString().Length;

        for (var i = start; i < n; i++)
        {
            var calc = i + i.ToString().Select(c => c - '0').Sum();
            if (calc == n)
            {
                Console.WriteLine(i);
                return;
            }
        }
        
        Console.WriteLine(0);
    }

    static void Main(string[] args)
    {
        var n = int.Parse(Console.ReadLine()!);
        new Baekjoon().Solution(n);
    }
}

4. CLASS 2


사실 이거 자랑하려고 글 썼음.


게임 큐 돌리는 느낌으로 열심히 했다.

profile
그냥 바보

0개의 댓글