첫번째 수는 연산자가 항상 +
이고 나머지 숫자들에 대해 서로 다른 연산자를 사용하여 풀었다. 처음에 연산자 우선순위까지 고려해야 되는 줄 알고 엄청 어려울 줄 알았지만 그냥 순서대로 연산하면 되서 해결할 수 있었다. 그리고 음수를 양수로 나눌 때는 C++14의 기준을 따른다.
라는 규칙이 있어서 나눗셈 연산자는 a // b
이 아닌 int(a / b)
와 같이 연산시켰다.
import sys
N = int(sys.stdin.readline())
nums = list(map(int, sys.stdin.readline()[:-1].split()))
opers = list(map(int, sys.stdin.readline()[:-1].split()))
minNum, maxNum = 100000001, -100000001
def calculate(curr, idx):
if idx == len(nums):
global maxNum, minNum
maxNum = max(maxNum, curr)
minNum = min(minNum, curr)
return
for i in range(4):
if opers[i] > 0:
temp = curr
if i == 0:
temp += nums[idx]
elif i == 1:
temp -= nums[idx]
elif i == 2:
temp *= nums[idx]
else:
temp = int(temp / nums[idx])
opers[i] -= 1
calculate(temp, idx + 1)
opers[i] += 1
calculate(nums[0], 1)
print(maxNum)
print(minNum)