ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 백준 11399 - ATM
    카테고리 없음 2022. 1. 9. 15:59

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

     

    11399번: ATM

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

    www.acmicpc.net

    n = int(input())
    arr= list(map(int, input().split()))
    
    arr.sort()
    time_arr = []
    for i in range(len(arr)):
        t = sum(arr[:i+1])
        time_arr.append(t)
    
    print(sum(time_arr))

    문제 안에 솔루션이 담겨 있는 문제다. 다시 말해서, 시간 소요가 적은 사람들부터 우선적으로 ATM을 해결할 수 있게 하는 경우의 수가 전체 이용인원의 이용시간의 합을 최소로 만들 수 있는 경우의 수라는 이야기가 된다.

     

    그렇기 때문에 시간소요가 적은 사람들부터 쓸 수 있게, sort를 먼저 해 주고,

    a[0]번째로 쓰는 사람은 0번이 이용하는 시간만을 더해주고 time_arr에 그 값을 저장한다.

    a[1]번째로 쓰는 사람은 0+1번이 이용하는 시간을 더해주고 time_arr에 그 값을 저장한다.

    a[2]번쨰로 쓰는 사람은 0+1+2번이 이용하는 시간을 더해주고 time_arr에 그 값을 저장한다.

    ...

    이후 time_arr의 각 값의 합계를 출력한다.

     

    greedy_algorithm 문제인데, 그 중 가장 기초적인 내용을 담은 데다가 어떻게 하면 greedy하게 선택할 수 있는지를 문제에서 알려줘서 쉽게 풀 수 있는 문제다.

Designed by Tistory.