Notice
Recent Posts
Recent Comments
Link
«   2025/12   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

똥그래미 코딩공장

백준 11399번(ATM) 파이썬 본문

Algorithm

백준 11399번(ATM) 파이썬

동그라미_ssu 2022. 2. 13. 20:18

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

 

11399번: ATM

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

www.acmicpc.net

 

이 문제는 greedy 문제 유형이다. greedy란 현 상황에서 가장 효율적인, 적합한 방법을 찾는 알고리즘의 유형이다.

시간의 합의 최솟값을 구하는 문제이기 때문에 먼저 어떤 순서로 사람들의 시간을 더할지 생각해야 한다. 최솟값을 알아내려면 사람들의 순서가 시간이가장 작은 사람부터 순서대로 정렬하고 더하는 방법이 최솟값을 알아내는데 가장 적합하다. 

 

num = int(input())
time = 0
Mintime = 0
arr = list(map(int,input().split()))

arr.sort()

for k in range(num):
    time=arr[k]
    Mintime+=time
    arr[k]=Mintime    
    
print(sum(arr))

 

첫째 줄에 사람의 수를 입력받고 둘째 줄에는 시간을 입력 받는다 그리고 시간의 순서를 오름차순으로 정렬해주고 각 시간들의 중첩해서 더해줘야 하므로 time과mintime변수를 활용해주었다. mintime변수에는 최소시간의 값을 넣어주어 arr배열에 넣어준 다음 모든 과정들이 끝나면 arr에는 최소시간들의 합들이 주어져 있다. 그리고 arr의 합을 출력해주면 문제는 해결된다.