import heapq import sys input=sys.stdin.readline N = int(input()) card_deck = [] for _ in range(N): heapq.heappush(card_deck, int(input())) if len(card_deck)==1: print(0) else: answer=0 while len(card_deck) > 1: k=heapq.heappop(card_deck)+heapq.heappop(card_deck) answer+=k heapq.heappush(card_deck,k) print(answer)
우선순위 큐를 이용해서 2개를 뺀 후 (우선순위 큐에서 heappop하면 가장 작은 것 2개를 빼낸다) 더한 값을 결과값에 누적해서 더해주고, 다시 우선순위 큐에 집어넣는다.
우선순위 큐를 사용하지 않는다면 2개를 더한 값을 넣어준 후 다시 sort()를 쓰던지 해서 정렬시켜야 하는데, 당연히 시간초과가 난다.
어떻게든 우선순위 큐를 안써보려고 해봤지만, 로직대로면 다시 정렬해야 하기에 라이브러리를 사용 안 할수가 없다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
n=int(input()) card=sorted([int(input()) for _ in range(n)]) isSet=False comp_sum=0 comp=0 for idx,i in enumerate(card): if isSet==True: comp_sum+=(comp_sum+prev+i) isSet=False else: if idx==n-1: comp_sum+=(comp_sum+i) prev=i isSet=True print(comp_sum)
위는 틀린 코드인데, 더해서 누적하는 과정은 여차저차 했다고 쳐도 다시 정렬하는 과정이 없기에 당연히 틀린 답이다.
문제를 보고 어떤 로직으로 풀 지, 또 거기에는 어떤 라이브러리가 필요한지 캐치하는 능력을 기르자 (아직 턱없이 부족하다)