본문 바로가기
Problem Solving

[Stack] 괄호의 완성

by Bokoo14 2022. 12. 13.
어떤 문자열 S에 앞뒤로 괄호를 추가하여 S를 올바른 괄호열로 만들고자 한다.
괄호로만 구성된 문자열 S가 주어졌을 때, S를 올바른 괄호열로 만들기 위해 앞과 뒤에 붙여할 할 괄호의 최소 개수를 출력하시오.
예를 들어, S = "((()" 인 경우에는 S="((()))"로 뒤에 2개의 괄호를 추가하면 된다.
S="()))("인 경우에는 S="((()))()"로 앞에 2개, 뒤에 1개의 괄호를 추가하면 된다.
단, 올바른 문자열을 만들 수 없는 입력은 주어지지 않는다고 가정해도 된다.
Input
첫째 줄에 괄호로만 구성된 문자열 S가 주어진다.
[1] )))()
[2] )(()
[3] ))()((
[4] )(()(()))
Output
첫째 줄에 S를 올바른 괄호열로 만들기 위해 앞뒤로 추가해야 할 괄호의 최소 개수를 출력한다.
[1] 3
[2] 2
[3] 4 
[4] 1
import sys
input =sys.stdin.readline

# 뒤에 붙이는건 ")" 스택에 남아있는 갯수"("만큼 붙여주면 된다 len(stack)
# 앞에 붙이는건 "(" close를 만나면 pop을 시켜줘야 하는데 스택이 비어있으면 +1만큼 증가시켜준다

def sol(array):
    cnt = 0
    stack=[]
    for i in range(len(array)):
        if array[i]=="(":
            stack.append(array[i])
        else:
            if len(stack)==0:
                cnt+=1
            else:
                stack.pop()
                
    return cnt+len(stack)

array = list(input().strip())
print(sol(array))

'Problem Solving' 카테고리의 다른 글

[Hash Table] 과일가게: 가장 많이 팔린 과일  (0) 2022.12.13
[Queue] 카드 버리기  (0) 2022.12.13
[Stack] 내림차순 수열  (0) 2022.12.13
[Queue] 요세푸스의 선물  (0) 2022.12.13
[Stack] 주차 관리인  (0) 2022.12.13