Algorithm/acmicpc.net
때론 머리를 비우기도 하기 (실버2)
winney916
2022. 2. 13. 15:05
728x90
#15658번 연산자 끼워넣기 (2) https://www.acmicpc.net/problem/15658
15658번: 연산자 끼워넣기 (2)
첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1보다 크거나 같고, 4N보다 작거나 같은 4개의 정수가 주어지는데, 차례대
www.acmicpc.net
자꾸 복잡하게만 생각하는게 내 흠인 것 같다.
간결한 코드도 좋지만 조금은 편하게 쉽게 생각할 필요가 있다.
N = int(input())
nums = list(map(int, input().split()))
cals = list(map(int, input().split())) # +, -, *, /
maximum = -10**9
minimum = 10**9
def solve(idx, result):
global maximum, minimum
if idx == N:
maximum = max(maximum, result)
minimum = min(minimum, result)
return
if cals[0] > 0: # add
cals[0] -= 1
solve(idx+1, result+nums[idx])
cals[0] += 1
if cals[1] > 0: # sub
cals[1] -= 1
solve(idx+1, result-nums[idx])
cals[1] += 1
if cals[2] > 0: # mulitple
cals[2] -= 1
solve(idx+1, result*nums[idx])
cals[2] += 1
if cals[3] > 0: # devide
cals[3] -= 1
solve(idx+1, int(result/nums[idx]))
cals[3] += 1
solve(1, nums[0])
print(maximum)
print(minimum)
재귀 호출을 하고 난 뒤, 리스트의 자료들을 원 상태로 복구시키는 작업을 잊지말자.