스택에 "("랑 "["만 추가하면서 입력이 스택 마지막에 있는 값이랑 매칭이 되는지 확인하면 된다.
import sys
while True:
S = sys.stdin.readline().rstrip()
if S == '.':
break
stack = []
for s in S:
if s not in ['(', ')', '[', ']']: # 소괄호, 대괄호만 확인
continue
if stack and stack[-1] == '(' and s == ')': # 스택에 마지막 값이 "("라면 ")"가 와야 매칭이 된다.
stack.pop() # 매칭이 된다면 스택에서 제거
elif stack and stack[-1] == '[' and s == ']': #"["도 마찬가지
stack.pop()
else:
stack.append(s)
if len(stack) == 0:
print('yes')
else:
print('no')
라고 쉽게 풀줄 알았는데..
반례 이것저것 넣어봤지만 다 제대로 나오길래 설마 싶었다.
처음에는 입력을 받을 때
S = sys.stdin.readline().strip()
로 받았는데 이러면 " ."을 입력 받았을 때 좌우 공백이 다 사라져 "."로 들어가 밑에 코드를 실행하지 않고 종료되버린다.
strip()
을 rstrip()
으로 수정해 오른쪽의 개행문자만 제거하도록 수정해준다.
solved.ac 기준 class 2에 있는 9012번 문제와 10773번 문제도 같은 방법으로 풀어주면 된다.