[백준]14888, 2504(python)

HS·2024년 8월 1일

14888 - 연산자 끼워넣기

#14888
N = int(input())
A_lst = list(map(int,input().split()))
B_lst = list(map(int,input().split())) # + - * /


#백트래킹 문제
#재귀를 이용하는 것이 가장 좋을 것
max_value = -21e8
min_value = 21e8

def dfs(total, level, plus, minus, gop, nanugi):
    global max_value, min_value
    if level == N:
        max_value = max(total, max_value)
        min_value = min(total, min_value)
        return

    if plus:
        dfs(total+A_lst[level], level+1, plus-1, minus, gop, nanugi)
    if minus:
        dfs(total-A_lst[level], level+1, plus, minus-1, gop, nanugi)
    if gop:
        dfs(total*A_lst[level], level+1, plus, minus, gop-1, nanugi)
    if nanugi:
        if total < 0:
            dfs((total*(-1)//A_lst[level])*(-1), level+1, plus, minus, gop, nanugi-1)
        else:
            dfs(total//A_lst[level], level+1, plus, minus, gop, nanugi-1)

dfs(A_lst[0],1,B_lst[0], B_lst[1], B_lst[2], B_lst[3])
print(max_value)
print(min_value)

2504 - 괄호의 값🤔

#2504
arr = list(input())

# 여는 괄호는 스택에 넣고, 닫는 괄호는 스택에서 꺼내 짝을 비교

def cal():
    stack = []
    cur_value = 1
    res_value = 0

    for i in range(len(arr)):
        if arr[i] == '(':
            stack.append(arr[i])
            cur_value *= 2
        elif arr[i] == '[':
            stack.append(arr[i])
            cur_value *= 3
        elif arr[i] == ')':
            if not stack or stack[-1] != '(':
                return 0
            if arr[i-1] == '(':
                res_value += cur_value
            stack.pop()
            cur_value //= 2
        elif arr[i] == ']':
            if not stack or stack[-1] != '[':
                return 0
            if arr[i-1] == '[':
                res_value += cur_value
            stack.pop()
            cur_value //= 3

    if stack:
        return 0
    return res_value




print(cal())
profile
공부하면서 알게 된 여러가지 지식을 아카이빙합니다

0개의 댓글