토리의 데굴데굴 공부일기

[백준] 11399 ATM Python 본문

Algorithm

[백준] 11399 ATM Python

도토오오리 2023. 8. 5. 15:59

문제 출처 : www.acmicpc.net/problem/11399

 

11399번: ATM

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

www.acmicpc.net

문제 설명: ATM에 줄을 서 있는 모든 사람이 업무를 마치는 순간까지 걸리는 시간이 최소가 되게 하는 문제이다. 

 

문제 풀이: 앞의 대기 시간이 줄어들면 뒤의 사람의 대기시간이 줄어드는 것이 보장되기 때문에 항상 적은 숫자가 앞으로 가야 최적해를 찾을 수 있다. 

 

아이디어

1. sort 함수를 사용하여 오름차순 정렬한다

2. 예시를 보고 규칙을 찾아 숫자가 N-(인덱스값)만큼 반복되어 더해진다는 걸 찾았다

 

코드

#11399 ATM

N = int(input())
p = list(map(int, input().split()))

#오름차순 정렬
p.sort()

#시간 총합
total_time = 0

for i in range(N):
    total_time += p[i] * (N-i)
    
print(total_time)