본문 바로가기

Baekjoon

[Baekjoon]백준 11399 ATM(실버 4) - Python

문제설명

문제를 살펴보면 각 사람마다 돈을 인출하기 위해 걸리는 시간을 순서대로 입력받고

모두가 돈을 인출하는데 걸리는 시간의 합이 최소가 되는 경우를 찾아 그 합을 출력하여야한다

가장 적은 시간이 걸리도록 하려면 빨리 뽑을 수 있는 사람이 먼저 뽑는 것이 전체를 위해선 제일 좋은 선택이다

만약 1분, 2분만에 출력가능한 사람을 두고 30분이 걸리는 사람이 먼저 뽑게된다면

1분, 2분만에 뽑는 사람들은 30분을 기다려야하지만 본인이 인출할 수 있기 때문에

모든 인원이 걸리는 시간을 고려하면 비효율적인 방법이라고 할 수 있다

그래서 입력받은 리스트의 정보를 sort()함수로 정렬하고, 정렬한 값 순서대로 누적합 알고리즘을 사용하여

각 순서에 따라 걸리는 시간을 저장해주었다 이후에 해당 리스트의 전체 합을 출력하도록 코드를 작성하였다

num = int(input())
time = list(map(int, input().split()))
time.sort()

result = [time[0]]
for i in range(1, num):
    result.append(result[i-1] + time[i])
    
print(sum(result))

result 리스트에는 초기값으로 가장 적게 걸리는 시간을 넣어주고, append를 통해 누적합을 저장해주었다

이후 sum함수를 이용하여 전체 리스트의 합을 구해주면 된다