Algorithm/Python

[백준 14888] 연산자 끼워넣기

🥭맹2 2021. 4. 18. 01:05

1. 문제

www.acmicpc.net/problem/14888

 

14888번: 연산자 끼워넣기

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

www.acmicpc.net

2. 접근 방법

DFS를 이용해서 모든 경우의 수를 고려해야합니다.

3. 코드

python

def cal(prev, n):
    global max_ans, min_ans
    if n == N:
        max_ans = max(max_ans, prev)
        min_ans = min(min_ans, prev)
        return
    if sign[0] > 0:
        add = prev + numbers[n]
        sign[0] -= 1
        cal(add, n+1)
        sign[0] += 1
    if sign[1] > 0:
        sub = prev - numbers[n]
        sign[1] -= 1
        cal(sub, n+1)
        sign[1] += 1
    if sign[2] > 0:
        mul = prev * numbers[n]
        sign[2] -= 1
        cal(mul, n+1)
        sign[2] += 1
    if sign[3] > 0:
        if prev >= 0:
            div = prev // numbers[n]
        else:
            div = -((-prev) // numbers[n])
        sign[3] -= 1
        cal(div, n+1)
        sign[3] += 1

N = int(input())
numbers = list(map(int, input().split()))
sign = list(map(int, input().split()))
max_ans, min_ans = -1e9, 1e9
cal(numbers[0], 1)
print(max_ans, min_ans, sep="\n")

4. 마치며

처음에 틀렸는데 ㅠ max_ans 초기값을 -1e9가 아니라 0으로 초기화해서 틀려버렸다 

문제를 제대로 읽자 좀 ㅜ.ㅜ

'Algorithm > Python' 카테고리의 다른 글

[백준 14891] 톱니바퀴  (0) 2021.04.18
[백준 14889] 스타트와 링크  (0) 2021.04.18
[백준 14503] 로봇 청소기  (0) 2021.04.17
[백준 14502] 연구소  (0) 2021.04.17
[백준 17136] 색종이 붙이기  (0) 2021.04.17