파이썬으로 풀어보는 백준 16637번: 괄호 추가하기

사막의배·2020년 12월 2일
0

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

2020.1.26

내 풀이:

N = int(input())
expression = input()
answer = -2 ** 31
 
if N == 1:
    print(max(answer, int(expression)))
    exit()
 
symbol = ["+", "-", "*"]
 
 
def add_parenthesis(index, expression_list):
    global answer
    if index == N:
        for i, j in enumerate(expression_list):
            if len(j) == 3:
                expression_list[i] = str(eval(j))
        result = expression_list[0]
        for _ in range(1, len(expression_list), 2):
            result = eval(str(result)+expression_list[_]+expression_list[_+1])
 
        if answer < result:
            answer = result
        return
 
 
    expression_list.append(expression[index])
    add_parenthesis(index + 1, expression_list)
    del expression_list[-1]
 
    if expression_list[-1] in symbol and index + 3 <= N:
        expression_list.append(expression[index:index+3])
        add_parenthesis(index + 3, expression_list)
        del expression_list[-1]
 
 
add_parenthesis(1, [expression[0]])
print(answer)

Python3, 60ms
이번 문제에서는 내장함수를 공부할 때 개인적으로 인상깊었던 eval() 함수를 사용했다. 괄호를 추가했다는 것을 구분하는 방법으로 리스트에 괄호로 싸인 (숫자+기호+숫자)를 한 번에 추가하는 것으로 처리하였다. 코딩을 하는 과정에서 에러가 많이 발생해 조금 해맸는데 그 이유는 eval() 함수로 출력되는 수의 타입이 int라는 사실을 몰랐기 때문이다. 만약 이전에 eval()을 사용해보았다면 코딩 과정에서 eval()의 결과값마다 str 처리를 해주어 문제를 빠르게 풀 수 있었을 것 같다.

profile
하루하루 성장하는 개발자

0개의 댓글

관련 채용 정보