Algorithm/Problem Solving

백준 C# 2231번 - 분해합

JeongKyun 2021. 9. 26.

나는 문제를 읽고 처음에는 공식을 찾고자 많은 방법을 시도해봤지만, 결국 답을 구하는 명확한 공식은 없을거다 생각하고 순서대로 작성 해보기로했다.

 

방식 순서

1. 자연수 N이 주어지니 자연수는 1~9이다. 그렇기때문에 count를 입력값의 길이만큼 9를 곱했다.

2. List에 compare_val의 값을 한자리 수 씩 넣어준다음 해당 List안의 값들을 모두 sum했다.

3. 문제에는 for문으로 풀었지만 설명하자면 while(input = compare_val + sum)의 조건이 성립한다면,

compare_val을 sum_list의 List에 추가해준다.

4. sum_list에 넣는 이유는 문제의 생성자가 하나가 아닐 경우가 있고, 그 중에서 최솟값을 찾기 위함이다.

5. sum_list에서 List의 최솟값을 도출한다. 

 

문제 풀고 느낀점

: 1등분이 푼 로직을 보니, 내 소스의 1/3의 줄이며 훨씬 더 간결하고 보기 쉽게 작성되어있었다.

지금의 내 소스는 공개하기엔 많이 부끄러운 소스지만 앞으로 누군가가 보고 참고할만한 개발자가 되도록 노력해야겠다. 

 

부족했던점

클래스화(간결성), 문제 이해도, 몫과 나머지 연산자 활용 능력

 

 

using System;
using System.Collections.Generic;
using System.Text;
using static System.Console;

namespace BaekJoon
{

    static class Program
    {

        static void Main(string[] args)
        {
            List<char> int_list = new List<char>();
            List<int> sum_list = new List<int>();

            //입력값
            string input = Console.ReadLine();

            //입력값을 int형으로 Convert
            int int_input = int.Parse(input);

            //비교값 (input - 1)
            int compare_val = -1;

            //길이
            int count = input.Length * 9;

            //한자리씩 더한 값
            int sum = 0;

            //sum_list 배열값 중 최솟값
            int min = 0;


            // (입력값의 길이 x 9)의 길이만큼 -1 해가면서 값을 구하기
            for (int i = 1; i <= count; i++)
            {
                compare_val = int_input - i;

                if (compare_val < 0)
                    break;

                //해당 값을 list에 한자리씩 넣기.
                foreach (char c in compare_val.ToString())
                {
                    int_list.Add(c);
                }

                //각 자리수의 값 더하기
                for (int j = 0; j < int_list.Count; j++)
                {
                    sum += int.Parse(int_list[j].ToString());
                }

                if (int_input == compare_val + sum)
                {
                    sum_list.Add(compare_val);
                }

                //List 및 sum 값 초기화
                int_list.Clear();
                sum = 0;
            }

            if (sum_list.Count == 0)
            {
                min = 0;
            }
            else
            {
                min = sum_list[0];
                for (int i = 0; i < sum_list.Count; i++)
                {
                    if (min > sum_list[i])
                    {
                        min = sum_list[i];
                    }
                }

            }

            Console.Write(min);

            Console.ReadKey();
        }

    }
}

 

=======내 제출 현황=======

 

반응형

댓글

💲 많이 본 글