처음에 사람들마다 각각 인출하는데 걸리는 시간이 할당되어 있길래 위상 정렬같은 문제인 줄 알았는데, 막상 풀어보니 그냥 배열만 사용하면 되는 실버 4치고 매우 쉬운...문제였다.
N = int(input()) # 5
time = sorted(list(map(int, input().split()))) # 3 1 4 3 2 -> 1 2 3 3 4
sum = 0
temp = 0
arr = [0]*N
for i in range(N):
arr[i] += (time[i] + temp)
temp = arr[i]
sum += arr[i]
print(sum)
먼저 사람의 수인 N을 입력 받고, time 리스트를 숏코딩으로 사람들 각각의 시간을 입력한 뒤 최솟값을 구해야 하기 때문에 리스트를 오름차순으로 정렬해준다.
sum은 합계 저장용, temp는 앞 사람들이 걸렸던 시간을 반복문 갱신 전 기록하는 용도로 각각 0으로 초기화 하여 생성했고, arr 배열은 각 사람들이 인출하는데에 필요한 시간의 합을 순서대로 기록한 것이다. 이는 temp 활용을 위해 필요했다.
for문을 N번만큼 반복하여 먼저 0으로 초기화된 arr 배열의 첫 번째 원소부터 time의 값과 temp를 합친 값을 더해주고, 해당 값을 temp에 저장한 뒤 다음 회차의 반복문이 실행되면 이 값이 temp로서 다음 사람의 인출 시간에 더해지게 된다.
이 과정이 반복되면 sum에는 최종적으로 구하고자 하는 값이 포함되게 된다!
'Python' 카테고리의 다른 글
[백준/Python] 1436 : 영화감독 숌 (0) | 2024.07.17 |
---|---|
[백준/Python] 14501 : 퇴사 (0) | 2024.07.17 |
[백준/Python] 1094번 : 막대기 (0) | 2024.07.14 |
[백준/Python] 15702번 : 중간고사 채점 (0) | 2024.07.12 |
[백준/Python] 1010번 : 다리 놓기 (0) | 2024.07.04 |