문제를 풀면서 그냥 input() 으로 풀때는 괜찮았는데, readline 을 쓰니까 출력초과가 떴다.
머리를 싸매다가 readline 은 개행문자를 포함해서 받는다는 것과 놓쳤던 조건을 발견하고 아래와 같은 반례를 생각해낼 수 있었다.
조건을 보면 아래 밑줄친 부분처럼 개행문자로 끝나는 것이 아닌, '.'이 있어야 한 줄이 끝난다.
그런데 readline은 개행문자를 포함해서 받아오기 때문에 한 줄씩 받아와서 처리를 하니 줄 마다 결과가 나왔던 것이고,
input 을 쓰면 자동으로 개행문자를 지워서 받아오니 문제가 되지 않았던 것이다.
[반례]
[)]
.
.
[readline 출력 결과]
no
yes
yes
yes
[정답]
no
# 여기 주석풀고 제출하면 출력 초과가 나온다
# import sys
# input = sys.stdin.readline
def stackLoop(text):
stack = []
for char in text:
if char == '(' or char == '[':
stack.append(char)
elif char == ')':
if stack and stack[-1] == '(':
stack.pop()
else:
return False
elif char == ']':
if stack and stack[-1] == '[':
stack.pop()
else:
return False
if not stack:
return True
else:
return False
while True:
# 입력을 받고
text = input()
# 만약 입력이 비어있다면 loop 를 끝낸다
if text == '.':
break
if stackLoop(list(text)):
print('yes')
else:
print('no')