예제 입력 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)

 

 

+ Recent posts