CodingTest/Baekjoon

[baekjoon] 백준 2800번(파이썬): 괄호 제거

JunJangE 2022. 5. 14. 02:31

문제

 

2800번: 괄호 제거

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

www.acmicpc.net

알고리즘

- 반복문을 통해 괄호의 시작점과 끝점을 순서대로 저장한다.

- 저장된 괄호의 시작점과 끝점을 제거하기 위해 모든 경우의 수를 확인한다. 이때, 괄호의 개수를 늘리면서 확인한다.

- 반복문을 통해 모든 경우의 수의 괄호를 제거하고 저장한다.

- 중복 없이 저장된 것을 오름차순으로 정렬하여 출력한다.

코드

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

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com