상세 컨텐츠

본문 제목

파이썬으로 풀어보는 백준 16637번: 괄호 추가하기 (삼성 A형 기출 문제)

Python/문제풀이 (삼성 A형 대비)

by 코딩하는 낙타 2020. 1. 26. 22:48

본문

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

 

16637번: 괄호 추가하기

길이가 N인 수식이 있다. 수식은 0보다 크거나 같고, 9보다 작거나 같은 정수와 연산자(+, -, ×)로 이루어져 있다. 연산자 우선순위는 모두 동일하기 때문에, 수식을 계산할 때는 왼쪽에서부터 순서대로 계산해야 한다. 예를 들어, 3+8×7-9×2의 결과는 136이다. 수식에 괄호를 추가하면, 괄호 안에 들어있는 식은 먼저 계산해야 한다. 단, 괄호 안에는 연산자가 하나만 들어 있어야 한다. 예를 들어, 3+8×7-9×2에 괄호를 3+(8×7)-(9×

www.acmicpc.net

 

내 풀이:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
= 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(1len(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[-1in 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 처리를 해주어 문제를 빠르게 풀 수 있었을 것 같다.

관련글 더보기

댓글 영역