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 |