실버1 : 완전 탐색 문제이다.

풀이

  • 그냥 가능성을 다 구한다.
  • 그런데 시간 초과가 날수도 있다. 왜냐하면 +-*/가 중복될 수 있으니까
  • 그래서 set으로 이런 중복을 제거한후 주르륵 계산해서 답.

Code

import sys
from itertools import permutations
 
input = sys.stdin.readline
 
n = int(input())
a = list(map(int, input().split()))
plus, minus, multi, div = map(int, input().split())
state = ["+"] * plus + ["-"] * minus + ["*"] * multi + ["/"] * div
 
opList = set(permutations(state, len(state)))
maxNum, minNum = -1e11, 1e11
for operations in opList:
    ans = a[0]
    for op, num in zip(operations, a[1:]):
        ans = int(eval(f"{ans}{op}{num}"))
    maxNum = max(maxNum, ans)
    minNum = min(minNum, ans)
 
print(maxNum)
print(minNum)

Reference