728x90
반응형
SMALL
문제
괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고 부른다. 한 쌍의 괄호 기호로 된 “( )” 문자열은 기본 VPS 이라고 부른다. 만일 x 가 VPS 라면 이것을 하나의 괄호에 넣은 새로운 문자열 “(x)”도 VPS 가 된다. 그리고 두 VPS x 와 y를 접합(concatenation)시킨 새로운 문자열 xy도 VPS 가 된다. 예를 들어 “(())()”와 “((()))” 는 VPS 이지만 “(()(”, “(())()))” , 그리고 “(()” 는 모두 VPS 가 아닌 문자열이다.
여러분은 입력으로 주어진 괄호 문자열이 VPS 인지 아닌지를 판단해서 그 결과를 YES 와 NO 로 나타내어야 한다.
풀이
- 본인은 이 문제를 보고 stack 구조를 떠올렸고, 괄호가 "(" 열릴때는 push, ")" 닫힐때는 pop을 해주는 구조를 구상
N = int(input())
for _ in range(N):
stack = []
type = False
sample = input()
for i in sample:
if i == "(":
stack.append("(")
else:
if not stack:
type = True
break
stack.pop()
if stack or type:
print("NO")
else:
print("YES")
- 맨 처음 몇번의 입력을 받을지 생각했고, 그 다음 반복문을 통해 여러번 입력을 받음
- 만약 닫히는 ")" 괄호가 생성 되었을때, stack이 비어있다면 type이라는 boolean 변수를 통해 원하는 조건을 충족하지 못한 경우 반복문을 나가게 하고 바로 NO 를 출력하게 구현
- 만약 모든 반복문이 끝났는데 stack에 값이 있다면 조건이 충족 되지 못했다는 것이기 떄문에 NO를 출력
- 위 조건을 다 만족시켰을 경우 YES를 출력하게 구현하였다.
728x90
반응형
LIST
'알고리즘 && 자료구조 > 백준' 카테고리의 다른 글
[백준 2798] 블랙잭(Feat.Python)[Combination] (0) | 2024.01.16 |
---|---|
[백준 1436] 영화감독 숌 (Feat.Python) (0) | 2024.01.15 |
[백준 10773] 제로 (Feat.Python) (1) | 2024.01.03 |
[백준 11279] 최대 힙 (Feat.Python) (0) | 2024.01.03 |
[백준 10828] 스택(Feat. Python) (0) | 2023.10.25 |