본문 바로가기
파이썬알고리즘

20210705#(60) 백준 11399 ATM (그리디)

by zho 2021. 7. 5.

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

 

11399번: ATM

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

www.acmicpc.net

 

책에서 그리디 문제들을 풀다보니 재밌어서 백준에서 풀어본 그리디문제..

 

첫째 줄에 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 출력한다.

가 조건인 문제이다. 그래서 만약 3 4 1 2 5가 입력되면 1 2 3 4 5 순서로 배치해야 더했을때 최소가 되는걸 확인할 수 있다.

위 1 2 3 4 5 로 배치했을때 계산 결과는 1 + (1+2) + (1+2+3) + (1+2+3+4) + (1+2+3+4+5) 이다.

내가 위 계산결과에서 발견한 규칙은 1은 5번 2는 4번 3은 3번 4는 2번 5는 1번 더해진다는 규칙이다.

그렇기에 나는 sort(reverse=True)를 이용해 5 4 3 2 1로 정렬 후 for문을 통해 min_res에 더해주는 방법으로 풀었다. 

 

n=int(input())
human_line=list(map(int,input().split()))
human_line.sort(reverse=True)
min_res=0
for i in range(n):
  min_res+=human_line[i]*(i+1)
print(min_res)

728x90