C# 11399번 ATM

2022. 2. 7. 19:24C#/[백준] 그리디 알고리즘

코드 :

using System;

namespace _2
{
    class Program
    {
        static void Main(string[] args)
        {
            //이문제가 그리디인 이유는 각 사람마다 걸리는 인출시간이
            //앞사람의 인출시간이 무조건 작아야만 뒷사람이 작아지는 원리이기 때문이다
            //만약 맨 앞사람의 인출시간이 길다면
            //뒷사람 수 만큼 앞사람의 인출시간이 계속 더해진다
            //즉 앞사람은 무조건 인출시간이 짧아야만 한다

            int N = Convert.ToInt32(Console.ReadLine());
            var inputData = Array.ConvertAll(Console.ReadLine().Split(' '), int.Parse);
            Array.Sort(inputData);

            int time = 0;

            
            for (int i = 0; i < inputData.Length; i++)
            {
                //첫번째 사람의 인출시간은 첫번째 사람
                //두번째 사람의 인출시간은 첫번째 사람 + 두번째 사람
                //세번째 사람의 인출시간은 첫번째 사람 + 두번째 사람 + 세번째 사람
                //N번째 사람의 인출 시간은 첫번째부터 N까지의 인출시간을 더하면 된다.
                for (int j = 0; j <= i; j++)
                {
                    time += inputData[j];
                }
            }

            Console.WriteLine(time);
        }
    }
}

문제 풀이 :

앞사람의 인출시간이 무조건 짧아야한다. 왜냐하면 앞사람의 인출시간이 계속해서 더해지기 때문이다. 따라서 인출시간 오름차순으로 선정렬을 해준다. 

아쉬운 점은 스터디모임에서 이중for문을 사용하지 않아도 풀 수 있음을 알게 되었다. 시간복잡도를 줄이는 연습을 꾸준히 해야할것같다.

 

'C# > [백준] 그리디 알고리즘' 카테고리의 다른 글

C# 13305번 주유소  (0) 2022.02.07
C# 1541번 잃어버린 괄호  (0) 2022.02.07
C# 1931번 회의실 배정  (0) 2022.02.07
C# 11047번 동전 0  (0) 2022.02.07