알고리즘 스터디 정렬 - 11399번
정렬 알고리즘 11399번 풀이
study백준 정렬 11399번
안녕하세요 GDSC ML 멤버 나건주입니다.
파이썬 알고리즘 스터디 3주차 정렬의 두번째 문제를 풀어보았습니다.
https://www.acmicpc.net/problem/11399
먼저 문제 분석부터 진행해보겠습니다.
i번째에 ATM에 방문한 사람이 걸리는 시간을 \(P_i\) 라고 합니다.
이때 3번째 방문한 사람의 시간은 \(\displaystyle\sum_{i=1}^{3} P_i\) 일 것입니다.
즉, 모든 사람들이 돈을 인출하는 시간의 합이 가장 작으려면 적게 걸리는 사람이 먼저 돈을 인출해야합니다.
따라서 sorted()를 통해 입력받은 숫자들을 오름차순으로 먼저 정렬해주었습니다.
그 다음, total과 temp를 통해 temp에서는 n번째 사람이 걸리는 시간을 저장해주고 total에 전 사람까지 걸린 시간을 저장해주었습니다.
people=int(input()) #사람수 입력
time=sorted(list(map(int,input().split()))) #map으로 split된 값을 list로 저장 후 sorted로 오름차순 정렬
total=0 #n번째 사람까지 걸린 시간의 총합
temp=0 #n번째 사람이 기다린 시간
for i in time:
temp=temp+i #n번째 사람이 기다린 시간= 이전 사람이 기다린 시간+ 그 사람이 걸리는 시간
total=temp+total
print(total)
5
3 1 4 3 2
32
마무리
가장 시간이 적게 걸리기 위해서는 가장 적은 시간이 걸리는 사람부터 처리를 해야하는 것을 알면 sort를 이용하여 쉽게 풀 수 있는 것 같습니다.