Algorithm/Problem Solving

백준 C# 2798번 - 블랙잭

JeongKyun 2021. 9. 26.

방식 순서

1. N의 개수만큼 int[] num에 input2로 받은 string 값을 하나씩 넣어준다, (convertAll 써서 바로 int형으로 input2만들어줬어도 됐을듯?)

2. 3장의 카드를 골라 더한 값 중 M의 값을 넘지않고 최대한 가까운 값을 도출해야 하기때문에, 3중 for문을 사용하여 모든 경우의 수를 짜줬다. (ex : 0,1,2 -> 0,1,3 -> 0,1,4 ...)

3. 각 경우의 수마다 더한 값을 sum으로 놓고, if (sum <= input_val && min < sum)의 의미는

해당 sum의 값이 입력값과 같거나 작고, min<sum는 for문을 입력값과 최대한 가까운 수를 구하기 위한 조건이다.

4. min<sum의 조건으로 인해 for문이 끝나고 나온 min은 모든 조건을 성립하는 목표치보단 작지만 최대한 가까운 수이다.

5. min이 문제의 출력값이된다.

 

문제 풀고 느낀점

: 요번 문제도 시간은 좀 걸렸지만 나름 선방했다고 생각한다. 고수분들의 답안과 비교하면 정말 지저분한 소스지만,

접근성은 비슷했다고 생각한다. 제출하고나서 메모리와 시간이 마음에 들지않아 여러번 수정한 덕에 6156kb , 120ms에서 5952kb, 104ms까지 줄었다. 그래도 1등과는 16ms나 차이가 난다. 조건문에 더 신경쓰자.

 

부족했던점

클래스화(간결성), 문법성(문법 하나로 여러 줄을 줄일 수 있음)

 

배운것들

1. 1등한 사람 문제 제출 참조

var input = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);

=> 이런식으로 ConvertAll을 사용하여 띄어쓰기 간 배열로 넣으면서 int형으로 파싱할수 방법을 처음알았다.

이거 알았으면 첨에 input2를 for문 걸어서 num[]에 넣는 방식 안써서 시간 꽤 줄었을듯?

 

아래는 나의 풀이이다.

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

namespace BaekJoon
{

    static class Program
    {

        static void Main(string[] args)
        {
            string[] input = Console.ReadLine().Split();

            string[] input2 = Console.ReadLine().Split();

            //N의 개수
            int count = int.Parse(input[0]);

            //입력 값
            int input_val = int.Parse(input[1]);

            int sum = -1;
            int min = 0;
            int[] num = new int[count];

            for (int i = 0; i < count; i++)
            {
                num[i] = int.Parse(input2[i]);
            }


            for (int i = 0; i < count; i++)
            {
                for (int j = i + 1; j < count; j++)
                {
                    for (int k = j + 1; k < count; k++)
                    {
                        sum = num[i] + num[j] + num[k];

                        if(sum <=input_val && min < sum)
                        {
                            min = sum;
                        }

                    }

                }
            }
            Console.Write(min);
        }
    }
}

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

반응형

댓글

💲 많이 본 글