[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))