본문 바로가기

Python/백준

#14 [python] 11399번: ATM

728x90

https://www.acmicpc.net/problem/11399

 

11399번: ATM

첫째 줄에 사람의 수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 각 사람이 돈을 인출하는데 걸리는 시간 Pi가 주어진다. (1 ≤ Pi ≤ 1,000)

www.acmicpc.net

 

❗ 문제 분석

 P1 = 3, P2 = 1, P3 = 4, P4 = 3, P5 = 2  일 경우, 1번 사람은 3분만에 돈을 뽑을 수 있다. 2번 사람은 1번 사람이 돈을 뽑을 때 까지 기다려야 하기 때문에, 3+1 = 4분이 걸리게 된다. 3번 사람은 1번, 2번 사람이 돈을 뽑을 때까지 기다려야 하기 때문에, 총 3+1+4 = 8분이 필요하게 된다. 4번 사람은 3+1+4+3 = 11분, 5번 사람은 3+1+4+3+2 = 13분이 걸리게 된다. 이 경우에 각 사람이 돈을 인출하는데 필요한 시간의 합은 3+4+8+11+13 = 39분이 된다.

 

각 사람이 돈을 인출하는데 필요한 시간의 합의 최솟값을 구하는 프로그램 

 

  • 걸리는 시간 : [3 1 4 3 2] 일 경우
    • 3 : 3분
    • 3+1 : 4분
    • ...
    • 3+1+4+3+2 : 13분

    3+4+8+11+13 = 39분

 

  • 걸리는 시간 : [1 2 3 3 4]
    • 1 : 1분
    • 1+2 : 3분
    • ...
    • 1+2+3+3+4 : 13분

 1+3+6+9+13 = 32분 

 

오름차순으로 정렬후 덧셈하는 것이 최솟값 구하는 방

 

💫 코드 분석

  • 최솟값으로 구해야 하기 때문에 걸리는 시간을 오름차순으로 정렬 후 코드수행
  1. n = int(input()) 으로 n 값 받기
  2. time.sort() 오름차순으로 정렬
  3. for x in range(1,n+1):
  4. answer += sum(time[0:x]) # 리스트의 0번째 수부터 x 번째 수까지 더해줌

정해진 범위대로  넣은 값을 다 더하는 함수로 answer 값 갱신

 

 

✔️ 코드

n = int(input())

time = list(map(int,input().split()))
time.sort()
answer =0

for x in range(1,n+1):
    answer += sum(time[0:x]) # 리스트의 0번째 수부터 x 번째 수까지 더해줌

print(answer)