백준 14888번 연산자 끼워넣기

dev-log·2022년 3월 29일

순열로 푼 방법 pypy3는 통과하는데 python3에서는 시간 초과가 난다.

import sys
input=sys.stdin.readline
n=int(input())

num=list(map(int,input().split()))
op=[]
size=list(map(int,input().split()))
for i in range(4):
    for j in range(size[i]):
        if i==0:
            op.append('+')
        elif i==1:
            op.append('-')
        elif i==2:
            op.append('*')
        else:
            op.append('/')

answer=[]
maxi=-float('inf')
mini=float('inf')
def dfs(cnt):
    if cnt==len(op):
        global maxi,mini
        sum=num[0]
        for i in range(len(op)):
            n=num[i+1]
            if op[answer[i]]=='+':
                sum+=n
            elif op[answer[i]]=='-':
                sum-=n
            elif op[answer[i]]=='*':
                sum*=n
            else:
                sum=int(sum/n)
    
        mini=min(mini,sum)
        maxi=max(maxi,sum)
        return 

    for i in range(len(op)):
        if not i in answer:
            answer.append(i)
            dfs(cnt+1)
            answer.pop()
    
dfs(0)
print(maxi)
print(mini)
profile
배운 걸 기록하는 곳입니다.

0개의 댓글