while True:
s=input()
arr=[]
if s==".":
break
for i in s:
if i=='(' or i=='[':
arr.append(i)
elif i==')':
if len(arr)!=0 and arr[-1] == '(':
arr.pop()
else:
arr.append(i)
break
elif i==']':
if len(arr)!=0 and arr[-1] =='[':
arr.pop()
else:
arr.append(i)
break
if len(arr)==0:
print('yes')
else:
print('no')
최종 print문에서 출력 실수가 있었다.(소문자를 대문자로 출력함)
접근방법
import sys
input=sys.stdin.readline
while True:
s=input()
arr=[]
if s=='.':
break
for i in s:
if i=='(' or i=='[':
arr.append(i)
elif i==')':
if len(arr)!=0 and arr[-1] == '(':
arr.pop()
else:
arr.append(i)
break
elif i==']':
if len(arr)!=0 and arr[-1] =='[':
arr.pop()
else:
arr.append(i)
break
if len(arr)==0:
print('YES')
else:
print('NO')
입출력 시간을 감소시키기 위해 import sys input=sys.stdin.readline
를 사용해주었는데, 출력 초과 라는 결과가 나왔다.
출력 초과는 처음이라 찾아보니 이라고 한다.
알고보니 sys.stdin.readline을 사용하면 공백문자까지 받아와서 그런다고 한다.
이를 sys.stdin.readline().rstrip() 로 변경하여 사용하면 공백문자를 제거할 수 있다고 한다.(참고:https://www.acmicpc.net/board/view/63774)
import sys
#input=sys.stdin.readline
input = lambda: sys.stdin.readline().rstrip()
while True:
s=input()
arr=[]
if s=='.':
break
for i in s:
if i=='(' or i=='[':
arr.append(i)
elif i==')':
if len(arr)!=0 and arr[-1] == '(':
arr.pop()
else:
arr.append(i)
break
elif i==']':
if len(arr)!=0 and arr[-1] =='[':
arr.pop()
else:
arr.append(i)
break
if len(arr)==0:
print('YES')
else:
print('NO')
위의 질문을 참고하여 코드를 수정해보았다.
여전히 틀렸습니다. 라는 결과가 수행되었다.(이 때 대문자를 소문자로 바꿔주었더라면...)
while True:
s=input()
arr=[]
if s=='.':
break
for i in s:
if i=='(' or i=='[':
arr.append(i)
elif i==')':
if len(arr)!=0 and arr[-1] == '(':
arr.pop()
else:
arr.append(i)
break
elif i==']':
if len(arr)!=0 and arr[-1] =='[':
arr.pop()
else:
arr.append(i)
break
if len(arr)==0:
print('YES')
else:
print('NO')
이때 여전히 대문자 때문이라는 생각을 하지 못해..
아예 sys를 import하지 않았다.
당연히 안됨
while True:
s=input()
arr=[]
if s==".":
break
for i in s:
if i=="(" or i=="[":
arr.append(i)
elif i==")":
if len(arr)!=0 and arr[-1] == "(":
arr.pop()
else:
arr.append(")")
break
elif i=="]":
if len(arr)!=0 and arr[-1] =="[":
arr.pop()
else:
arr.append("]")
break
if len(arr)==0:
print('YES')
else:
print('NO')
최종 제출 전 마지막 답안이다.
코드에서 큰 문제가 안보여
혹시나 하는 마음에 작은 따옴표를 다 큰 따옴표로 바꿔주었다ㅠ(똑같은거 아는데 채점 시스템은 좀 다른가해서.. 바꿔보았다..ㅎㅏ)
여전히 오류..
문제를 다시 읽어보아도 놓친 조건이 없어보였다.
이에 다른 분들 코드를 찾아보았고,, 출력 조건이 잘못되었다는 것을 알게되었다.. ㅜ
이에 출력을 수정하였고, 위와 같이 최종 답안을 얻어낼 수 있었다...
이런 실수는 어떻게 고쳐나가야 하는 것인지.. 문제를 꼼꼼히 읽는다고 읽었는데 너무 속상하다..
그래도 오늘 여러 시행착오를 거치면서 배운 것도 있었다.
import sys input=sys.stdin.readline
는 공백문자를 포함한다는 것
공부하는 과정이고, 연습하는 과정이니 더 꼼꼼히 할 수 있도록 노력해봐야겠다.