[ BOJ / Python ] 14698번 전생했더니 슬라임 연구자였던 건에 대하여 (Hard)

황승환·2022년 7월 19일
0

Python

목록 보기
383/498


이번 문제는 최소힙을 이용한 그리디 문제였다. 이전에 풀어봤던 문제들과 같은 유형의 문제였기 때문에 접근법은 바로 생각해낼 수 있었다. 슬라임들의 크기를 입력받고, 이 값들을 최소힙에 담은 후, 최소힙의 크기가 1이 될때까지 최소힙에서 2개의 값을 꺼내서 곱하고, 이 값들을 결과변수와 곱한 후, 곱한 값을 최소힙에 담는 과정을 반복하였다.

시간초과가 계속해서 발생하여 문제점을 찾아보았고, 두 슬라임을 꺼내어 곱한 값을 변수로 관리하지 않고, 사용할 때마다 곱하여 사용한 점에서 큰 수가 들어왔을 때 부하가 발생할 수도 있겠다고 생각하였다. 이 부분을 변수를 사용하는 방법으로 고쳤지만 시간초과가 여전히 발생하였고, sys.stdin.readline() 을 이용하자 통과할 수 있었다.

Code

import heapq
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
    n = int(input())
    tmp = list(map(int, input().split()))
    answer = 1
    if n == 1:
        print(1)
        continue
    slime = []
    for i in range(n):
        heapq.heappush(slime, tmp[i])
    while len(slime) > 1:
        s1 = heapq.heappop(slime)
        s2 = heapq.heappop(slime)
        new_s = s1*s2
        answer *= new_s
        heapq.heappush(slime, new_s)
    print(answer%1000000007)

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글