[Python] 알고리즘/Silver

[14888] 연산자 끼워넣기 (Python)

-Becca- 2022. 5. 24. 21:30

[문제]

https://www.acmicpc.net/problem/14888

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 

www.acmicpc.net


알고리즘 분류는 브루트포스 알고리즘, 백트래킹 입니다.

저는 Python의 permutations(조합)을 사용하여 풀었습니다.

연산자 우선순위를 무시하고 앞에서 부터 계산해야 하고, 음수를 양수로 나눌 때의 조건도 지정해주어야 합니다.


[코드]

import sys
from itertools import permutations

N = int(sys.stdin.readline())
A = list(map(int, sys.stdin.readline().split()))
plus, minus, mul, div = map(int, sys.stdin.readline().split())

st = "+ " * plus + "- " * minus + "* " * mul + "// " * div
li = st.split()
test = set(permutations(li, len(li)))

res = list()
for i in test:
    sum = A[0]
    for j in range(len(i)):
        if i[j] == "+":
            sum += A[j + 1]
        elif i[j] == "-":
            sum -= A[j + 1]
        elif i[j] == "*":
            sum *= A[j + 1]
        elif i[j] == "//":
            if sum < 0:
                sum = -(abs(sum) // A[j + 1])
            else:
                sum //= A[j + 1]
    res.append(sum)

print(max(res), min(res))