11399번: ATM (acmicpc.net)

 

11399번: ATM

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

www.acmicpc.net

 

#풀이

import sys

#1) n = int(sys.stdin.readline())
#2) p = list(map(int,sys.stdin.readline().split()))

#3) p=sorted(p)

#4) time=0
 
#5) for i in range(n):
         time+=p[i]*(n-i)
   
#6) print(time)

 

1. n에 줄 서 있는 사람이 몇 명인지를 입력 받음.

 

2. p라는 리스트에 사람들 각각 atm 이용 시간이 얼마나 걸리는지 입력 받음.

 

3. 리스트 p를 오름차순으로 정렬

(=이용 시간이 적게 걸리는 사람부터 이용하도록 하여 대기 시간을 줄여야 모든 이용자들의 이용 시간의 합을 최소화할 수 있다.)

 

4. 이용 시간의 합계를 저장할 변수 time을 만들었다. 초기값은 0.

 

5. 총 이용자의 수만큼 for문을 돌린다. 가장 처음(0 번째) 이용하는 사람의 이용 시간은 n번 더해지고,

그 후로는 이용시간 x (n-자기 순서)번 더해진다. 가장 마지막에 이용하는 사람의 이용 시간은 딱 한번만 더하게 된다. 

 

6. 누적된 대기+이용시간인 time을 프린트한다.

'알고리즘 PS > Greedy' 카테고리의 다른 글

백준 #1931번 회의실 배정  (0) 2024.05.02
백준 #11047번 동전 0 파이썬  (1) 2024.01.30
백준 #2864 5와 6의 차이  (0) 2023.10.02
백준 #1439 뒤집기  (0) 2023.08.27
백준 #4796 캠핑  (0) 2023.08.27

+ Recent posts