반응형
문제
https://www.acmicpc.net/problem/11399
코드
n = int(input())
data = list(map(int, input().split()))
data.sort()
for i in range(1, n):
data[i] = data[i - 1] + data[i]
print(sum(data))
풀이
모든 사람들의 기다리는 시간의 합을 최소로 하게 하려면 인출하는데 가장 적은 시간이 걸리는 사람이 먼저 ATM을 사용하면 된다.
ex. 2명일때
ATM 5분 걸리는 사람이 먼저 사용 -> ATM 1분 걸리는 사람이 사용
1번째 사람은 5분, 2번째 사람은 6분(앞사람 5분 + 본인 1분) 기다렸으므로 총합 11분
ATM 1분 걸리는 사람이 먼저 사용 -> ATM 5분 걸리는 사람이 사용
1번째 사람은 1분, 2번째 사람은 6분(앞사람 1분 + 본인 5분) 기다렸으므로 총합 6분
그렇기에,
1. data.sort() 로 오름차순으로 정렬한 후
2. data[i] = data[i - 1] + data[i] 연산을 index 1부터 마지막 원소까지 진행한다. (각 사람들의 기다리는 시간 계산)
3. 모든 사람들의 기다리는 시간을 합해서 출력한다. print(sum(data))
반응형
'Programming > 알고리즘' 카테고리의 다른 글
[백준 / Python] 1181번 단어 정렬 (0) | 2023.07.09 |
---|---|
[백준 / Python] 2941번 크로아티아 알파벳 (1) | 2023.07.02 |
[백준 / Python] 1026번 보물 (0) | 2023.05.12 |
[백준 / Python] 1003번 피보나치 함수 (1) | 2023.05.05 |
[백준 / Python] 1297번 TV 크기 (1) | 2023.04.08 |
댓글