https://www.acmicpc.net/problem/11399
이건 생각보다 간단하게 풀렸다.
2-30분 정도 걸렸던 것 같다!
문제를 읽어보니 걸리는 시간이 가장 적은 사람부터 인출했을 때
인출하는데 필요한 시간의 합의 최솟값을 구할 수 있었다.
얼마전에 알고리즘도감 보다가 구현해뒀던 삽입정렬 코드를 가져다가 썼다
이제 정렬 코드는 외우고 있어야 할 것 같기도..?
#include <iostream>
using namespace std;
int main(void)
{
int count_people = 0;
cin>>count_people;
int *time_withdrawals = new int[count_people];
for(int i=0; i<count_people;i++)
{
cin>>time_withdrawals[i];
}
// 합의 최솟값이니까 가장 걸리는 시간이 적은 사람부터 인출하면 됨
// 삽입정렬
for(int i=1; i<count_people; i++)
{
int tmp = time_withdrawals[i];
int idx = 0;
for(int j=i-1; j>=0; j--)
{
if(time_withdrawals[j] > tmp)
{
time_withdrawals[j+1] = time_withdrawals[j];
idx=j;
}
else
{
idx=j+1;
break;
}
}
time_withdrawals[idx]=tmp;
}
int *answer = new int[count_people];
for(int i=0; i<count_people; i++)
{
for(int j=0; j<=i; j++)
{
answer[i] += time_withdrawals[j];
}
}
int ans = 0;
for(int i=0; i<count_people; i++)
{
ans += answer[i];
}
cout<<ans<<endl;
delete[] time_withdrawals;
delete[] answer;
return 0;
}