반례 때문에 틀린 문제, 앞으로는 문제를 읽으면서 관용적으로 인정해버리지 말자. 꼼꼼하고 깐깐하게 if else문 쓰기.
Hello [I am] (working) on this 4949.p(y.
즉, AAA.BB. 의 형태에서 .을 기준으로 종료해버리면 BB의 문자열이 균형잡히지 않은 경우를 NO로 체크하기 힘들다.
stack = []
def main():
global stack
answers = []
while(True):
T = input()
if T == ".": break # 종료 조건
for i in range(len(T)):
if T[i] in ['(', '[']:
# T의 i번째 문자가 여는 괄호일 경우, 스택에 추가만 하기
stack.append(T[i])
elif T[i] in [')', ']']:
# T의 i번째 문자가 닫는 괄호일 경우, 스택의 top과 비교해서 맞물리지 않으면 NO
ans = close(T[i])
if not ans:
answers.append('no')
break
if i == len(T)-1 and len(stack)==0:
# T를 끝까지 하고 스택이 깨끗하면 YES
answers.append('yes')
elif i == len(T)-1 and len(stack)!=0:
# T가 끝까지 되었는데 스택에 뭐가 잔여해 있으면 NO
answers.append('no')
stack = []
for ans in answers:
print(ans)
def close(c):
global stack
matches = {')':'(', ']':'['}
if len(stack) != 0:
top = stack.pop()
if top == matches[c]:
return True
else:
return False
else:
return False
main()