-코드
from sys import stdin
while 1:
c = stdin.readline()
s = []
r = True
if c[0] == ".":
break
for i in c:
if i == '(' or i == '[':
s.append(i)
if i == ')':
if len(s) == 0 or s[-1] == '[':
r = False
break
elif s[-1] == '(':
s.pop()
elif i == ']':
if len(s) == 0 or s[-1] == '(':
r = False
break
elif s[-1] == '[':
s.pop()
if r and len(s) == 0:
print("yes")
else:
print("no")
처음에는 9012번 푼 것처럼 했다가 틀리게 나와서 질문 게시판과 알고리즘 분류를 보니 스택을 사용하는 것이어서 코드를 다시 짜고 입력을 넣어보니 중간에 ], )가 먼저 나왔을 경우 s의 길이가 0이어서 인덱스 오류가 생겨서 추가 if문을 만들어 주었습니다. 그 후에 출력이 문제가 없어서 넣어봤으나 틀렸습니다. 그래서 반례를 찾아보니 어떤 분이 댓글을 달아주신 입력인 [(Wrong]Wrong) Wrong]일 경우 경우와. 이면 끝나야 하는 경우를 쳐봤더니 둘 다 적용이 안되고 있어서. 은 c == '.'이어서 안 되는 거여서 위 코드와 같이 바꾸어 주었고 [(Wrong] Wrong) Wrong] 같은 경우는 괄호의 종류가 맞지 않는 것이 들어가면 오류가 뜨기 때문에 다른 괄호가 들어갈 경우와 배열 s의 길이가 0인 경우 따로 참, 거짓을 판단하게 하여서 해결을 하였습니다.
'Beakjoon&프로그래머스 > 파이썬' 카테고리의 다른 글
[백준/파이썬]2805번 나무 자르기 (0) | 2021.05.12 |
---|---|
[백준/파이썬]1654번 랜선 자르기 (0) | 2021.05.11 |
[프로그래머스/파이썬] 완주하지 못한 선수 (0) | 2021.05.09 |
[백준/파이썬]2702번 초6 수학 (0) | 2021.05.09 |
[백준/파이썬]2748번 피보나치 수 2 (0) | 2021.05.09 |