백준 11399.ATM
문제에서 하나의 ATM기를 이용하기 위해 줄서 있는 사람들이
각 사람이 돈을 인출하는데 기다리는 시간의 합이 최소가 되도록 하려고 한다.
어떻게 코드를 짜야 효율적으로 총 대기 시간을 구할 수 있을까.
문제에서 제시한 조건
1. ATM기는 하나, N명의 사람들이 줄을 서 있다.
2. 각각의 사람이 현금을 인출하는데 걸리는 대기 시간은 앞 사람들의 처리 시간과 본인의 처리 시간을 더한 시간이다.
2. 모든 사람이 인출하는데 끝나는 시간이 아니라 각각의 사람이 인출하기 위해 대기한 시간의 총 합을 구하는 것이다.
문제 풀이 방법
- 뒷 사람이 조금이라도 덜 기다리고 돈을 인출하기 위해서는 가장 짧은 시간 동안 이용 가능한 사람들이 먼저 ATM기를 이용해야 한다.
- 따라서 가장 적은 시간만큼 이용하는 사람 순으로 정렬한 다음 각각의 대기 시간(waiting time)을 구하고 모든 대기시간을 더해 총 대기 시간(total time)을 구한다
수도 코드
sort time table
for time in time table:
waiting_time += time
total_time += waiting_time
return total_time
파이썬 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import sys def greedy(line): total_time = 0 waiting_time = 0 line.sort() for time in line: waiting_time += time total_time += waiting_time return total_time if __name__ == "__main__": n = int(sys.stdin.readline()) line = list(map(int, sys.stdin.readline().strip().split())) print(greedy(line)) | cs |
#백준 11399. ATM #python 백준 11399. ATM #백준 11399. ATM python #python 백준 11399. ATM #백준 11399. ATM python #11399 atm #백준 11399 atm #파이썬 11399 atm #11399 atm python #백준 11399 atm python #백준 atm #백준 greedy 알고리즘 문제
'온라인 코딩 테스트 문제 풀이 > 백준 문제 풀이' 카테고리의 다른 글
Python으로 푸는 백준 1758. 알바생 강호 (0) | 2019.02.05 |
---|---|
Python으로 푸는 백준 1946. 신입사원 (0) | 2019.02.04 |
Python으로 푸는 백준 1931. 회의실배정 (1) | 2019.02.01 |
Python으로 푸는 백준 11047.동전 0 (0) | 2019.01.30 |