시간이 짧은 순으로 처리해서 더하면, 최소 합이 된다.
2가지 방법으로 풀 수 있다.
1. 가로
tmp에 자기 차례까지 걸리는 시간을 저장한다.
result는 각각 자기 차례까지 걸리는 시간의 총합을 저장한다.
num = int(input())
li = list(map(int, input().split()))
li.sort()
tmp = li[0]
result = 0
for i in range(len(li) - 1):
tmp += li[i + 1]
result += tmp
print(result + li[0])
2. 세로
인출 시간이 짧을수록 많이 더해지는 점을 이용한다.
num = int(input())
li = list(map(int, input().split()))
li.sort(reverse = True)
result = 0
for i in range(1, num + 1):
result += i * li[i - 1]
print(result)
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ] [Python] 2156번 : 포도주 시식 (2) | 2021.07.27 |
---|---|
[BOJ] [Python] 11726번 : 2xn 타일링 (1) | 2021.06.26 |
[BOJ] [Python] 1697번 : 숨바꼭질 (0) | 2021.06.26 |
[BOJ] [Python] 1003번 : 피보나치 함수 (0) | 2021.06.26 |
[BOJ] [Python] 1010번 : 다리 놓기 (0) | 2021.05.24 |