본문 바로가기
알고리즘/자료구조

[백준][Python] 2800번 괄호 제거

by 임짠짠 2022. 2. 11.
반응형
 

2800번: 괄호 제거

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

www.acmicpc.net

 

코드

 

from itertools import combinations
inp = list(input())
stack = []
cnt = 0
com_list = []
answer = []
for i in range(len(inp)):
    if inp[i] == "(":
        stack.append([inp[i],i])
        cnt = 0
    elif inp[i] == ")":
        if cnt == 0:
            a = stack[-1][1]
            stack.pop()
            com_list.append([a,i])

for i in range(1,len(com_list)+1):
    li = ((combinations(com_list,i)))
    for j in li:
        inp_list = list(inp)
        for k in j:
            a,b = k
            inp_list[a] = ""
            inp_list[b] = ""
        answer.append(''.join(inp_list))
ans = set(answer)        

for i in sorted(ans):
    print(i)

 

설명

괄호의 위치를 나타내는 숫자를스택에 같이 넣어줘서 짝이 맞는 괄호끼리의 숫자를 com_list에 넣어주었다.

itertools.combination을 이용하여 com_list에 있는 값으로 만들 수 있는 모든 조합을 찾아냈다. 

각각의 조합에 있는 숫자들을 이용하여 그 위치에 있는 괄호들을 없애주었고 나머지 값은 answer 리스트에 담았다. 

inp_list = list(inp)를 할 때 처음에는 inp_list = inp 로 했더니 inp의 값도 inp_list를 따라 계속 바뀌었다. 

파이썬에서는 리스트를 복사할 때 list를 앞에 붙여줘야 된다는 것을 알게 됐다. 

 

또, 중복되는 값을 제거하지 않아서 오류가 나서 set함수를 이용해서 중복값을 제거해주었다. 

반응형

댓글