│문제
│풀이
T=int(input())
stack=[]
def judge():
for i in range(len(temp)):
if temp[i]=="(": #( 입력시에 push
stack.append("(")
else:
if len(stack)==0:
return print("NO")
else:
stack.pop(len(stack)-1) #) 입력시에 pop
if stack: return print("NO") # 스택이 비어있지 않으면 NO
else: return print("YES") # 스택이 비어있으면 YES
for i in range(T):
temp=list(input())
judge()
stack.clear()
│설명
'( '입력을 받은 경우 PUSH ,')'을 입력 받은 경우 POP 연산을 실행하는 스택구조이다.
한 쌍의 괄호 기호로 된 "()" 문자열을 VPS라 부른다.
입력받은 문자열이 VPS인지 아닌지 구분하는 문제로
처음에는 괄호가 한 쌍이면 VPS라 생각하여
T=int(input())
stack=[]
for i in range(T):
temp=list(input())
for i in range(len(temp)):
if temp[i]=="(":
stack.append("(")
else:
if len(stack)==0:
print("NO")
break
else:
stack.pop(len(stack)-1)
print("YES")
라고 코드를 작성하였지만 예로 들어 ()) 이런 경우에는 위의 잘못된 코드에서는 YES라 나오지만 실제로는 VPS는 아니다.
그러므로 FOR문을 통한 스택연산후 스택이 비어있는지 비어있지 않은지 확인하는
if stack: return print("NO")
else: return print("YES")
조건문이 추가 되어야 한다.
'Baekjoon' 카테고리의 다른 글
[백준] 1874번 스택 수열 (파이썬) (0) | 2023.07.15 |
---|---|
[백준] 1920번 수 찾기 ( 파이썬 / c언어) (0) | 2023.07.14 |
[백준] 4949번 균형잡힌 세상 (파이썬) (0) | 2023.07.09 |
[백준] 10773번 제로 (파이썬) (0) | 2023.07.09 |
[백준] 10828번 스택 ( 파이썬 / c언어 ) (0) | 2023.07.09 |