문제 링크 : www.acmicpc.net/problem/14888
입력받은 연산자들에 대해서 itertools에 있는 permutation에 대해서 가능한 모든 경우에 대해서 계산을 진행하여 최대/최소값을 구하였다.
import sys
from itertools import permutations
# 1-2÷3+4+5×6 ==> 54
def get_result(nums, ops):
N = len(nums)
result = 0
if ops[0] == '+':
result = nums[0] + nums[1]
elif ops[0] == '-':
result = nums[0] - nums[1]
elif ops[0] == 'x':
result = nums[0] * nums[1]
elif ops[0] == '/':
if nums[0] < 0 or nums[1] < 0:
result = -(abs(nums[0]) // abs(nums[1]))
else:
result = nums[0] // nums[1]
for i in range(1, N-1):
if ops[i] == '+':
result = result + nums[i+1]
elif ops[i] == '-':
result = result - nums[i+1]
elif ops[i] == 'x':
result = result * nums[i+1]
elif ops[i] == '/':
if result < 0 or nums[i+1] < 0:
result = -(abs(result) // abs(nums[i+1]))
else:
result = result // nums[i+1]
return result
N = int(sys.stdin.readline())
nums = list(map(int, sys.stdin.readline().split()))
op_count = list(map(int, sys.stdin.readline().split())) # + - x %
ops = ['+'] * op_count[0] + ['-'] * op_count[1] + ['x'] * op_count[2] + ['/'] * op_count[3]
min_result = sys.maxsize
max_result = -sys.maxsize
for permutation in permutations(ops, N-1):
temp_result = get_result(nums, permutation)
if min_result > temp_result:
min_result = temp_result
if max_result < temp_result:
max_result = temp_result
print(max_result)
print(min_result)
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 2667번 - 단지번호붙이기 (0) | 2021.01.13 |
---|---|
[백준] 1003번 - 피보나치 함수 (0) | 2021.01.04 |
[백준] 15650번 - N과 M(2) (0) | 2021.01.03 |
[백준] 15649번 - N과 M(1) (0) | 2021.01.03 |
[백준] 14891번 - 톱니바퀴 (0) | 2021.01.03 |