728x90
해당문제는 스택이라는 자료구조를 활용하여 문제를 해결 할 수 있습니다.
괄호는 반드시 “(”와 “)” 쌍으로 이루어 져야 합니다. 이를 바탕으로 문제를 해결 할 수 있습니다.
- 문자열이 주어졌을때 “(”가 나온다면 스택에 넣습니다.
- “)”가 나온다면 이전에 스택에 “(”인지 확인합니다.
- “(” 가 아니라면 괄호는 성립될 수 없습니다.
- “)”가 나온다면 “)”를 스택을 꺼낸뒤 이어갑니다.
- 모든 문자열을 순회한뒤 스택이 비어있지 않다면 “(”뒤에 “)”가 나와야하는데 나오지 않았음으로 쌍이 맞지 않습니다.
T = int(input())
for _ in range(T):
char = input()
stack = []
flag = True
for i in range(len(char)):
if char[i] == '(':
stack.append('(')
else:
if stack:
if stack[-1] == ')': # ') )' 가 연속으로 나온경우
flag = False
break
t = stack.pop() # 짝을꺼낸다.
else: # ')' 가 먼저 들어온경우
flag = False
break
if stack: # 짝을 맞추어 다 꺼내지도 못했을 경우
flag = False
if flag:
print("YES")
else:
print("NO")
728x90
'알고리즘 > 백준' 카테고리의 다른 글
[백준] 15685번 : 드래곤 커브 (0) | 2023.10.18 |
---|---|
[백준] 14718번 : 빗물 (1) | 2023.10.18 |
[백준] 20040번 : Cycle Game (0) | 2023.10.18 |
[백준] 10775번 : 공항 (1) | 2023.10.18 |
[백준] 1189번 : 컴백홈 (0) | 2023.10.18 |