본문 바로가기

스터디 1일 1커밋

240411 [BOJ/백준] 14888. 연산자 끼워넣기

https://www.acmicpc.net/problem/14888

 

14888번: 연산자 끼워넣기

첫째 줄에 수의 개수 N(2 ≤ N ≤ 11)가 주어진다. 둘째 줄에는 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 100) 셋째 줄에는 합이 N-1인 4개의 정수가 주어지는데, 차례대로 덧셈(+)의 개수, 뺄셈(-)의 개수, 곱

www.acmicpc.net


나의 코드

N = int(input())
numbers = list(map(int, input().split()))
symbols = list(map(int, input().split()))

min_val = 1000000000
max_val = -1000000000

def cal(idx, val, plus, minus, multiply, divide):
    global min_val, max_val

    if idx == N:
        max_val = max(max_val, val)
        min_val = min(min_val, val)
        return

    if plus:
        cal(idx+1, val+numbers[idx], plus-1, minus, multiply, divide)
    if minus:
        cal(idx+1, val-numbers[idx], plus, minus-1, multiply, divide)
    if multiply:
        cal(idx+1, val*numbers[idx], plus, minus, multiply-1, divide)
    if divide:
        cal(idx+1, int(val/numbers[idx]), plus, minus, multiply, divide-1)


cal(1, numbers[0], symbols[0], symbols[1], symbols[2], symbols[3])
print(max_val)
print(min_val)

 

결과


백트래킹으로 모든 연산들을 하는 방법으로 계산을 다 했을 때의 값을 최솟값과 최댓값과 비교하며 값을 갱신하기! 아직 백트래킹 어렵다... 그냥 재귀 어려워ㅜㅜㅜ