https://www.acmicpc.net/problem/16637
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 처리를 해주어 문제를 빠르게 풀 수 있었을 것 같다.