← Back to List

10885번: 수열의 장인 ↗

Solutions

Python 3
860 B | 860 chars
MOD = 1000000007

def max_subarray_product(arr):
    n = len(arr)
    max_prod = arr[0]
    min_prod = arr[0]
    result = arr[0]

    for i in range(1, n):
        if arr[i] < 0:
            max_prod, min_prod = min_prod, max_prod
        
        max_prod = max(arr[i], max_prod * arr[i])
        min_prod = min(arr[i], min_prod * arr[i])
        
        result = max(result, max_prod)
    
    return result % MOD

def solve():
    import sys
    input = sys.stdin.read
    data = input().split()

    index = 0
    T = int(data[index])
    index += 1
    results = []
    
    for _ in range(T):
        N = int(data[index])
        index += 1
        arr = list(map(int, data[index:index + N]))
        index += N
        
        result = max_subarray_product(arr)
        results.append(result)
    
    for res in results:
        print(res)


solve()