Basic_Studies/알고리즘 문제풀이
[파이썬] 백준 - 11399: ATM
adore_voy
2021. 1. 29. 13:12
문제
11399번: ATM
첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)
www.acmicpc.net
풀이
문제 설명이 긴데, 시각적으로 봐야 이해가 쉽다.
처음에 [3, 1, 4, 3, 2] 순으로 배열의 1번 사람은 3분만에 돈을 뽑을 수 있고
마지막 5번 사람은 나머지가 돈을 다 뽑은 후인 3 + 1 + 4 + 3 분 후에 2분을 들여 돈을 뽑을 수 있다.
이를 통해 총 인출 시간은 아래처럼 나타낼 수 있다.
3 + (3 + 1) + (3 + 1 + 4) + (3 + 1 + 4 + 3) + (3 + 1 + 4 + 3 + 2)
그런데, 인출에 필요한 시간의 최솟값을 구하려면, 반복되는 숫자를 작게 만들어야 한다.
오름차순으로 배열하면 최솟값을 구할 수 있다.
위의 설명을 식으로 만들면
첫번째 수 * 반복되는 만큼
결과 += 숫자리스트[i번째] * ( 총 숫자 - i ) 를 for문에 넣으면 된다.
import sys
n = int(sys.stdin.readline())
list = list(map(int, sys.stdin.readline().split()))
list = sorted(list)
result = 0
for i in range(n):
result += list[i]*(n - i)
print(result)
반응형