이번 문제는 최소힙을 이용한 그리디 문제였다. 이전에 풀어봤던 문제들과 같은 유형의 문제였기 때문에 접근법은 바로 생각해낼 수 있었다. 슬라임들의 크기를 입력받고, 이 값들을 최소힙에 담은 후, 최소힙의 크기가 1이 될때까지 최소힙에서 2개의 값을 꺼내서 곱하고, 이 값들을 결과변수와 곱한 후, 곱한 값을 최소힙에 담는 과정을 반복하였다.
시간초과가 계속해서 발생하여 문제점을 찾아보았고, 두 슬라임을 꺼내어 곱한 값을 변수로 관리하지 않고, 사용할 때마다 곱하여 사용한 점에서 큰 수가 들어왔을 때 부하가 발생할 수도 있겠다고 생각하였다. 이 부분을 변수를 사용하는 방법으로 고쳤지만 시간초과가 여전히 발생하였고, sys.stdin.readline()
을 이용하자 통과할 수 있었다.
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)