본문 바로가기
Programming/알고리즘

[백준 / Python] 11399번 ATM

by castberry_ 2023. 5. 27.
반응형

문제

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

 

11399번: ATM

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

www.acmicpc.net

 

코드

n = int(input())
data = list(map(int, input().split()))

data.sort()

for i in range(1, n):
    data[i] = data[i - 1] + data[i]
print(sum(data))

 

풀이

모든 사람들의 기다리는 시간의 합최소로 하게 하려면 인출하는데 가장 적은 시간이 걸리는 사람이 먼저 ATM을 사용하면 된다.

 

 ex. 2명일때

ATM 5분 걸리는 사람이 먼저 사용 -> ATM 1분 걸리는 사람이 사용 

1번째 사람은 5분, 2번째 사람은 6분(앞사람 5분 + 본인 1분) 기다렸으므로 총합 11분

 

ATM 1분 걸리는 사람이 먼저 사용 -> ATM 5분 걸리는 사람이 사용

1번째 사람은 1분, 2번째 사람은 6분(앞사람 1분 + 본인 5분) 기다렸으므로 총합 6분

 

그렇기에,

1. data.sort() 로 오름차순으로 정렬한 후

2. data[i] = data[i - 1] + data[i] 연산을 index 1부터 마지막 원소까지 진행한다. (각 사람들의 기다리는 시간 계산)

3. 모든 사람들의 기다리는 시간을 합해서 출력한다. print(sum(data)) 

 

 

반응형

댓글