[백준 2800] 괄호 제거

Junyoung Park·2022년 5월 29일
0

코딩테스트

목록 보기
449/631
post-thumbnail

1. 문제 설명

괄호 제거

2. 문제 분석

스택을 통해 괄호쌍의 위치를 구할 수 있다. 각 괄호쌍을 놔둘지 없앨지 조합을 통해 카운트(모든 괄호를 건드리지 않는 조건은 제외)할 수 있다. 이를 통해 새로운 식을 만들어내어 사전식으로 정렬하자. 도출된 식이 중복 가능하므로 집합을 통해 체크.

3. 나의 풀이

import sys
from itertools import combinations

expression = list(sys.stdin.readline().rstrip())
brackets = []
stack = []
for i in range(len(expression)):
    if expression[i] == "(":
        stack.append(i)
    elif expression[i] == ")":
        brackets.append([stack.pop(), i])

answers = set()

for num in range(1, len(brackets)+1):
    cases = list(combinations(brackets, num))
    for case in cases:
        new_expression = expression[:]
        for x, y in case:
            new_expression[x], new_expression[y] = '', ''
        answers.add(''.join(new_expression))
answers = list(answers)
answers.sort()
print(*answers, sep='\n')
profile
JUST DO IT

0개의 댓글