나는 문제를 읽고 처음에는 공식을 찾고자 많은 방법을 시도해봤지만, 결국 답을 구하는 명확한 공식은 없을거다 생각하고 순서대로 작성 해보기로했다.
방식 순서
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();
}
}
}
=======내 제출 현황=======
반응형
'Algorithm > Problem Solving' 카테고리의 다른 글
백준 JAVA 10870번 - 피보나치수 5 (0) | 2022.03.08 |
---|---|
백준 JAVA 10872번 - 팩토리얼 (0) | 2022.03.08 |
프로그래머스 C# - 소수 만들기 (Summer/Winter Coding) (0) | 2022.02.21 |
백준 JAVA 1436번 - 영화감독 숌 (0) | 2021.10.03 |
백준 C# 2798번 - 블랙잭 (0) | 2021.09.26 |
댓글