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
'파이썬알고리즘' 카테고리의 다른 글
20210706#(62) 백준 5585 거스름돈 (그리디) (0) | 2021.07.06 |
---|---|
20210705#(61) 백준 11047 동전 0 (그리디) (0) | 2021.07.05 |
20210705#(59) 책-이것이 취업을 위한 코딩 테스트다 with 파이썬 (그리디, 구현 총 4문제 풀이) (0) | 2021.07.05 |
20210703#(58) 백준 10828번 스택 (0) | 2021.07.03 |
20210703#(57) 백준 11727번 2 X n 타일링 2 (다이나믹 프로그래밍) (0) | 2021.07.03 |