Coding Test/Baekjoon

[백준] 11399번 ATM - Python

라딘 2022. 9. 7. 16:48

 

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

https://www.acmicpc.net/problem/11399

 

문제

N명의 사람이 돈을 인출하려고 하는 상황입니다. 각 사람이 돈을 인출하는데 걸리는 시간이 주어질 때,

모든 사람이 기다려서 돈을 인출하는데 걸리는 시간의 합의 최솟값을 구해주세요.

 

 

아이디어

모든 사람들이 기다리는 시간을 최소가 되게 하려면 인출 시간이 적게 걸리는 사람부터 순차적으로 진행하도록 해야합니다.

또한 i+1번째 사람이 인출하는데 걸리는 시간은 'i번째 사람이 기다려서 인출하는데 걸린 시간' + 'i+1번째 사람이 인출하는 시간'의 형태로 계속 누적되는 것을 이용합니다.

따라서 오름차순으로 정렬해준 뒤 반복적으로 인출하는데 걸리는 시간의 합계를 구해줍니다.

 

 

코드

N = int(input())
time = sorted(list(map(int,input().split())))
num = 0
sum = 0

for i in range(N):
  num = num + time[i]
  sum += num

print(sum)