예제 입력 1
5 는 N (사람 수)이고
3 1 4 3 2 는 각 사람들의 ATM사용 시간입니다.
ATM을 사용하는데 N명의 사람이 기다리는 최소누적시간을 구하는 문제입니다.
위의 문제 설명 Array로 설명해 놓았습니다.
1번째 예시
P[0] = 3 , P[1] = 1, P[2] = 4, P[3] = 3, P[4] = 2
와 같은 순서대로 계산하면 총 걸리는 시간(result)은 3+4+8+11+13 = 39분 입니다.
result값은 각 사람들의 걸리는 시간의 누적되어 더해집니다.
모두의 기다리는 시간 최소로 만드는 방법은
사용시간이 짧은 사람을 앞순서로 정렬하는 것입니다.
2번째 예시
P[1] = 1, P[4] = 2, P[0] = 3, P[3] = 3 , P[2] = 4
와 같은 순서대로 계산하면 총 걸리는 시간(result)은 1+3+6+9+13 = 32분 입니다.
<C++>
#include <iostream>
#include <list>
using namespace std;
int N;
int Wtime[1000];
int Wtime_sorted[1000];
int main(){
//각 사람의 걸리는 시간을 list로 잡았습니다.
list<int> mylist;
//N명의 값을 받습니다.
cin>> N;
//N명 각각의 걸리는 시간을 받습니다.
for(int i = 0; i<N; i++)
{
cin>> Wtime[i];
//list에도 담아줍니다.
mylist.push_back(Wtime[i]);
}
//list 오름차순으로 sort 합니다.
mylist.sort();
for(int i = 0; i<N; i++)
{
//Wtime_sorted Array에 list front값을 가져옵니다.
Wtime_sorted[i] = mylist.front();
//담아둔 front값을 pop 하여 버립니다.
mylist.pop_front();
}
int Sum = 0;
for(int k= 0; k < N; k++)
{
//N명분 사람의 걸린 시간 반복합니다.
for (int j = 0; j <= k; j++)
{
//0 ~ N-1번째 사람 앞사람의 걸린 시간 Sum에 더합니다.
Sum += Wtime_sorted[j];
}
}
cout<<Sum<<endl;
return 0;
}
<Python>
n = int( input())
s = list(map(int, input().split()))
sum= 0;
#오름차순으로 정렬해줍니다.
s.sort()
# print(s)
#큰 for loop n번까지 진행하는 i 입니다.
for i in range(n):
#i의 큰 loop가 돌때마다 i번까지 한번더 도는 작은 for loop입니다.
for j in range(i+1):
sum+= s[j]
print(sum)
'백준 문제풀이 > 그리디 알고리즘' 카테고리의 다른 글
Greedy Algorithm - [백준 문제 : 1541] 잃어버린 괄호 풀이 (0) | 2020.11.28 |
---|---|
Greedy Algorithm - [백준 문제 : 10162] 전자레인지 풀이 (0) | 2020.11.18 |