문제
알고리즘
- 반복문을 통해 괄호의 시작점과 끝점을 순서대로 저장한다.
- 저장된 괄호의 시작점과 끝점을 제거하기 위해 모든 경우의 수를 확인한다. 이때, 괄호의 개수를 늘리면서 확인한다.
- 반복문을 통해 모든 경우의 수의 괄호를 제거하고 저장한다.
- 중복 없이 저장된 것을 오름차순으로 정렬하여 출력한다.
코드
import sys
from itertools import combinations
n = list(map(str, sys.stdin.readline().strip()))
answer = set()
stack = []
temp = []
# 반복문을 통해 괄호의 시작점과 끝점을 저장
for idx, word in enumerate(n):
if word == "(":
stack.append(idx)
elif word == ")":
temp.append((stack.pop(), idx))
for i in range(1, len(temp) + 1):
c = combinations(temp, i) # combinations을 통해 모든 경우의 수를 확인
# 반복문을 통해 경우의 수를 확인
for j in c:
target = list(n)
# 괄호 제거
for k in j:
target[k[0]] = ""
target[k[1]] = ""
answer.add(''.join(target))
for ans in sorted(list(answer)):
print(ans)
github
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 15927번(파이썬): 회문은 회문아니야!! (0) | 2022.05.16 |
---|---|
[baekjoon] 백준 12919번(파이썬): A와 B 2 (0) | 2022.05.15 |
[baekjoon] 백준 6443번(파이썬): 애너그램 (0) | 2022.05.13 |
[baekjoon] 백준 9081번(파이썬): 단어 맞추기 (1) | 2022.05.12 |
[baekjoon] 백준 17926번(파이썬): Four Squares (1) | 2022.05.11 |