728x90
t = int(input())
for i in range(t):
galho = input()
stack = []
for j in galho:
if stack: # 1
if j == "(":
stack.append(j)
else:
if stack[-1] == "(":
stack.pop()
else:
stack.append(j)
else: # 1
stack.append(j)
if len(stack) == 0:
print("YES")
else:
print("NO")
# 1 : 스택이 비어있는지 채워져있는지를 확인해야 한다. 그렇지 않으면 예시에는 보이지 않는 테스트 케이스에서 )))))의 연타를 맞고 답이 틀리게 된다.
나의 코드)
import sys
t = int(sys.stdin.readline())
for _ in range(t):
stack = []
string = sys.stdin.readline().rstrip()
for char in string:
if char == '(':
stack.append(char)
else:
if stack and stack[-1] == '(':
stack.pop()
else:
stack.append(char) # 맨처음 닫는괄호가 나와도 넣어줄 수 있다
if stack:
print('NO')
else:
print('YES')
풀이2)
import sys
t = int(sys.stdin.readline())
for _ in range(t):
galho = sys.stdin.readline().strip()
stack = []
for i in range(len(galho)):
if galho[i] == '(':
stack.append(galho[i])
elif len(stack) != 0 and galho[i] == ')' and stack[-1] == '(': #1
stack.pop()
elif len(stack) == 0 and galho[i] == ')': #2
stack.append(galho[i])
if len(stack) != 0:
print('NO')
else:
print('YES')
#1: 파이썬 if 문의 조건은 먼저온 순서대로 판단한다.
가장 먼저 stack이 비어있지 않은지 확인하고, ')'가 입력되면 stack의 가장 위 요소가 '('인지 확인한다.
맞다면 스택의 가장 위 요소인 '('를 스택에서 빼준다
#2: 스택이 텅 비어 있을 때 ')'가 삽입될 수 있도록 해야 한다. 그래야 맨 처음 ')'가 입력되는 경우에 오류를 일으키지 않고 "NO"를 출력할 수 있다.
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 1874 파이썬(python) : 스택 수열 (0) | 2022.06.17 |
---|---|
[백준] 4949 파이썬(python) : 균형잡힌 세상 (0) | 2022.06.17 |
[백준] 10773 파이썬(python) : 제로 (0) | 2022.06.17 |
[백준] 2812 파이썬(python) : 크게 만들기 - (★) (0) | 2022.06.16 |
[백준] 10799 파이썬(python) : 쇠막대기 - (★) (0) | 2022.06.16 |