Algorithm/Problem Solving

백준 C# 2231번 - 분해합

JeongKyun 2021. 9. 26.

목차

백준 C# 2231번 - 분해합
백준 C# 2231번 - 분해합

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

 

방식 순서

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();
        }

    }
}

 

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

백준 C# 2231번 - 분해합

 

반응형

댓글