Algorithm/Greedy

[백준] 11399 ATM (Python 파이썬)

안드선생 2021. 4. 8. 01:09
반응형

www.acmicpc.net/problem/11399

 

11399번: ATM

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

www.acmicpc.net

문제 설명

ATM기 앞에 사람이 N명 서있는데, 이 N명의 사람들이 돈을 인출하는데 걸리는 시간은 제각각이다.

이 때, 앞 사람의 돈을 뽑는 시간이 길 수록, 뒤에 있는 사람들의 대기 시간은 길어지게 된다.

각 사람이 돈을 인출하는데 필요한 시간(대기시간+뽑는시간)의 합의 최솟값을 구하면 된다.


풀이 과정

내가 ATM기에 줄을 서 있다고 가정해보자. 나의 대기시간이 짧아지려면 어떤 상황이 되어야 하는가?

당연히 내 앞에서 돈을 뽑는 사람들이 돈을 빨리빨리 뽑아주면 된다.

즉, 돈을 뽑는 시간이 짧은 사람들 부터 앞에 오도록 하면 된다.

따라서, 시간순으로 정렬을 한 후에 모든 사람들의 시간을 합하면 정답이 된다.

 

n = int(input())
arr = list(map(int, input().split()))
arr.sort()

ans = 0
for i in range(n):
    ans += arr[i]
    arr[i] = ans

print(sum(arr))

 

https://github.com/HongEunho

 

HongEunho - Overview

📖 Android, Java, Kotlin, Algorithm. HongEunho has 15 repositories available. Follow their code on GitHub.

github.com

전체 문제 & 코드는 위의 깃에 정리되어 있습니다.

팔로우 & 맞팔은 환영입니다 !

반응형