[python] 11399_ATM

yeco_ob·2023년 2월 6일
0

알고리즘 문제 풀이

목록 보기
16/24

문제

인하은행에는 ATM이 1대밖에 없다. 지금 이 ATM앞에 N명의 사람들이 줄을 서있다. 사람은 1번부터 N번까지 번호가 매겨져 있으며, i번 사람이 돈을 인출하는데 걸리는 시간은 Pi분이다. 줄을 [2, 5, 1, 4, 3] 순서로 줄을 서면, 2번 사람은 1분만에, 5번 사람은 1+2 = 3분, 1번 사람은 1+2+3 = 6분, 4번 사람은 1+2+3+3 = 9분, 3번 사람은 1+2+3+3+4 = 13분이 걸리게 된다. 각 사람이 돈을 인출하는데 필요한 시간의 합은 1+3+6+9+13 = 32분이다. 이 방법보다 더 필요한 시간의 합을 최소로 만들 수는 없다.

줄을 서 있는 사람의 수 N과 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어졌을 때, 각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 프로그램을 작성하시오.

해결 방법

  1. 대기 시간 리스트 오름 차순 정렬

뒤에 서있는 사람은 앞 사람의 모든 소요 시간을 더하게 된다. 그러므로 소요시간이 긴 사람이 뒤에 서있어야 최소 시간을 구할 수 있다.

  1. 반복문으로 대기 시간의 합 구하기

2번째 사람은 1번째 사람의 시간 + 2번째 사람의 시간만큼 기다리고 3번째 사람은 1+2+3번째 사람의 시간을 기다린다.

즉, 2중 반복문으로 i, j를 이용하여 이들의 합을 구한다.

제출

import sys 
input = sys.stdin.readline

n = int(input()) #총 몇 명
time_list = list(map(int,input().split())) #시간 리스트

time_list.sort() #오름차순 정렬
cnt = 0

for i in range(n): #n까지 순서대로
    for j in range(i+1): #이전 사람들의 시간과 본인(i)의 시간 합
        cnt += time_list[j]

print(cnt)

메모

.sort()를 .sort라고 적고 런타임에러 5번 봤다★,°:.☆( ̄▽ ̄)/$:.°★ 。이런 실수... 적당히 하자 젭알

0개의 댓글