문제
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 |
댓글