알고리즘 풀이/백준

[백준 11899] 괄호 끼워넣기

mhko411 2021. 6. 15. 14:29
728x90

문제

올바른 괄호열은 각각의 괄호의 짝이 맞는다. 이때 올바르지 않은 괄호열이 주어졌을 때 올바른 괄호열을 만들기위해 괄호를 추가하기 위해 최소 몇 개가 필요한지 구하라.

 

입력

첫 번째 줄에 올바르지 않은 괄호열 S가 주어집니다. S의 길이는 1 이상 50 이하입니다.

 

출력

첫 번째 줄에 S를 올바른 괄호열으로 만들기 위해 앞과 뒤에 붙여야 할 괄호의 최소 개수를 출력합니다. 불가능한 경우는 주어지지 않습니다.


접근

스택에 이전의 괄호에 대해 기록한다. 이를 활용해서 올바르게 짝지어진 괄호들은 스택에서 pop하면 마지막엔 올바르지 않은 괄호만 스택에 남게된다.

 

구현

- 입력받은 문자열을 탐색한다.

- 여는 괄호가 나왔을 때는 스택에 push한다.

- 닫는 괄호가 나왔을 때 스택의 top이 여는 괄호라면 pop하고

- 스택이 비어있거나 스택의 top이 닫는 괄호라면 닫는 괄호를 push한다.

- 탐색이 종료되면 스택의 길이를 출력한다.

for s in S:
    if s == '(':
        stack.append(s)
    else:
        if stack and stack[-1] == '(':
            stack.pop()
        else:
            stack.append(s)

전체 코드

import sys
input = sys.stdin.readline

S = input().strip()
stack = []

for s in S:
    if s == '(':
        stack.append(s)
    else:
        if stack and stack[-1] == '(':
            stack.pop()
        else:
            stack.append(s)

print(len(stack))

'알고리즘 풀이 > 백준' 카테고리의 다른 글

[백준 2661] 좋은수열  (0) 2021.06.16
[백준 15926] 현욱은 괄호왕이야  (0) 2021.06.15
[백준 12789] 도키도키 간식드리미  (0) 2021.06.14
[백준 5002] 도어맨  (0) 2021.06.14
[백준 17299] 오등큰수  (0) 2021.06.14