본문 바로가기
IT/알고리즘

백준 - 9012번

by Sungjun_ 2020. 11. 7.

문제

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 


코드

 

import sys

class Stack:
    def __init__(self):     # 초기화
        self.stk = []

    def size(self):     # 스택의 사이즈
        return len(self.stk)

    def is_empty(self):     # 스택이 비었는지 검사
        return self.size() <= 0

    def push(self, value):      # 스택에 데이터를 넣음
        self.stk.append(value)

    def pop(self):      # 스택에서 데이터를 뺌
        if self.is_empty():
            return -1
        return self.stk.pop()

    def peek(self):     # 스택의 가장 윗 값을 리턴
        if self.is_empty():
            return -1
        return self.stk[-1]


N = int(sys.stdin.readline().strip())
for _ in range(N):
    s = Stack()     # 스택 초기화
    temp = list(input())    # 괄호 문자열 입력받고 리스트로 저장
    for i in temp:
        if s.size() == 0:
            if i == '(':    # 스택이 비어있을 때 i가 '('면 넣어주고
                s.push(i)   
            else:
                s.push(i)   # ')'면 규칙에 어긋나기 때문에 for문을 중지시킵니다.
                break
        else:   # 스택에 하나라도 있을 때 가장 윗 값을 비교합니다.
            if s.peek() != i:   # 가장 윗값은 항상 '('이고 i가 ')'이면 팝해줍니다. 
                s.pop()     

            else:   # i가 '('이면 넣어줍니다.
                s.push(i)
                
    if s.size() == 0:   # 스택이 비어있다면 괄호가 다 쌍을 이룬 것입니다.
        print('YES')
    else:
        print('NO')

 

'('가 스택안에 있을 때 다음에 들어오는 데이터가 ')'면 쌍을 이루어 스택에서나가고

다음에 들어오는 데이터가 '('면 쌍을 이루지 못하기 때문에

쌍을 이룰 때까지 스택에 들어간다고 생각하시면 됩니다.

 

그래서 쌍을 다 이루어 나가면 스택이 비어있기 때문에

스택 사이즈가 0이면 'YES' 아니면 'NO'입니다.

'IT > 알고리즘' 카테고리의 다른 글

백준 - 4949번  (0) 2020.11.09
백준 - 1406번  (0) 2020.11.09
알고리즘 - 스택(deque)  (0) 2020.11.06
백준 - 1874번(스택 수열)  (0) 2020.11.04
백준 - 10828번(스택)  (0) 2020.11.04

댓글