동캄의 코딩도장

백준 2800 [괄호 제거] 파이썬 본문

코테/BOJ

백준 2800 [괄호 제거] 파이썬

동 캄 2022. 9. 7. 16:00

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

 

2800번: 괄호 제거

첫째 줄에 음이 아닌 정수로 이루어진 수식이 주어진다. 이 수식은 괄호가 올바르게 쳐져있다. 숫자, '+', '*', '-', '/', '(', ')'로만 이루어져 있다. 수식의 길이는 최대 200이고, 괄호 쌍은 적어도 1개

www.acmicpc.net

# 백준 2800 괄호 제거
import sys
from itertools import combinations
input = sys.stdin.readline
lst = list(map(str, input().rstrip()))
stack = []
arr = []
for i in range(len(lst)):
    if lst[i] == '(':
        stack.append(i)
    elif lst[i] == ')':
        k = stack.pop()
        arr.append([k, i])
# arr.sort()
ans = []
for i in range(1, len(lst)+1):
    comb = combinations(arr, i)
    for c in comb:
        sol = ''
        temp = list(map(str, lst))
        for val in c:
            temp[val[0]] = '?'
            temp[val[1]] = '?'
        for val in temp:
            if val != '?':
                sol += val
        ans.append(sol)
ans.sort()
dup = []
for val in ans:
    if not val in dup:
        dup.append(val)
        print(val)

 

 

 

괄호쌍의 좌표를 저장하고, combination을 돌려서 모든 경우의 수를 계산한다. (괄호가 최대 10개 밖에 없으므로 가능하다.) 그리고 없앨 괄호 자리에 '?'를 넣고, 이를 무시한 문자열을 생성한다.

<중요> 중복을 제거한다.

((1)) 이면, 첫번째 괄호쌍을 제거한 (1) 두번째 괄호쌍을 제거한 (1) 경우가 같으므로 중복을 제거한다.

'코테 > BOJ' 카테고리의 다른 글

백준 4375 [1] 파이썬  (0) 2022.10.09
백준 4811 [알약] 파이썬  (0) 2022.09.19
백준 2491[수열] 파이썬  (0) 2022.09.07
백준 2504 [괄호의 값] 파이썬  (1) 2022.09.07
백준 1935 [후위 표기식2] 파이썬  (0) 2022.09.07