본문 바로가기

백준 문제 풀이 및 피드백

2023.01.19 ATM 백준[파이썬]

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

 

11399번: ATM

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

www.acmicpc.net

import sys
input = sys.stdin.readline
n = int(input().strip())
m = list(map(int,input().split()))
m = sorted(m)
sums = 0
for i in m:
    sums += i * n
    n -= 1
print(sums)

문제를 보고 정렬을 해서 가장 작은 수부터 n, n-1,..1 번씩 들어간다는 것을 알아서 sorted로 정렬하고 곱해서 풀었다.

 

보고 가장 작은거를 계속해서 구해야하기 때문에 heapq를 이용해서도 풀어봤다.

import sys
from heapq import heappop, heappush
input = sys.stdin.readline
n = int(input().strip())
m = list(map(int,input().split()))
heap = []
sums = 0
for i in m:
    heappush(heap,i)
    
for i in range(n):
    sums += heappop(heap) * n
    n -= 1
print(sums)

heapq는 처음에 리스트로 넣을 수 없어서 for문으로 한번 더 돌려줬다.