Problem Solving/백준
[BOJ 백준, 삼성 SW 역량 테스트 기출 문제] 14888번 : 연산자 끼워넣기 - Python
돌돌김
2021. 1. 4. 03:36
모든 경우의 수를 전부 확인해서 원하는 답을 구하는 전형적인 완전탐색 문제였다
숫자의 위치는 고정되어있고 모든 연산자를 사용해야 하므로 연산자의 순서만 정해주면된다.
사용 할 수 있는 연산자의 순서를 정할 때는 순열을 사용한다.
연산자가 최대 10개까지밖에 없으므로 파이썬 내장 라이브러리를 활용하여 풀었다.
주의할 점은 나누기 연산의 경우 음수로 나눠지는 경우가 있기 때문에
양수로 변환하여 나누기 연산을 한 뒤, 다시 음수화 하는 작업이 필요하다
소스코드
from itertools import permutations
n = int(input())
numbers = list(map(int, input().split()))
# 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱셈(×)의 개수, 나눗셈(÷)의 개수
_sum, _sub, _mul, _div = map(int, input().split())
s = '+'*_sum + '-'*_sub + '*'*_mul + "/"*_div
operators = list(s)
answer = 0
permu_operators = list(permutations(operators, len(operators)))
max_value = -2e9
min_value = 2e9
for oper in permu_operators:
result = numbers[0]
idx = 1
for item in oper:
if item == '+':
result += numbers[idx]
elif item == '-':
result -= numbers[idx]
elif item == '*':
result *= numbers[idx]
elif item == '/':
if result < 0 : # 음수일 경우
result = -(result)
result = result // numbers[idx]
result = -(result)
else:
result = result // numbers[idx]
idx += 1
max_value = max(max_value, result)
min_value = min(min_value, result)
print(max_value)
print(min_value)