C# 11399번 ATM
2022. 2. 7. 19:24ㆍ코딩테스트 문제 풀이/[백준] 그리디 알고리즘
728x90
반응형
코드 :
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문을 사용하지 않아도 풀 수 있음을 알게 되었다. 시간복잡도를 줄이는 연습을 꾸준히 해야할것같다.
728x90
반응형
'코딩테스트 문제 풀이 > [백준] 그리디 알고리즘' 카테고리의 다른 글
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 |