(스택) 균형잡힌 세상
2020. 2. 28. 23:22ㆍ개발노트
이 문제의 저작권은 BAEKJOON에 있습니다.
https://www.acmicpc.net/problem/4949
문제는 위 링크에서 확인할 수 있습니다.
S_cnt = 0
while True:
S = input()
if S == '.':
break
temp = []
err = 0
S_size = len(S)
for i in range(0, S_size - 1):
if S[i] is '(' or S[i] is '[':
temp.append(S[i])
elif S[i] is ')' or S[i] is ']':
try:
if S[i] is ')' and temp[-1] is '(':
temp.pop()
elif S[i] is ']' and temp[-1] is '[':
temp.pop()
else:
err = 1
break
except:
err = 1
break
if len(temp) >= 1 or err == 1:
print('no')
else:
print('yes')
S_cnt += 1
계속해서 한 줄씩 문자열이 주어지고 맨 마지막에 '.' (마침표)를 입력해야 끝나는 코드이기 때문에 while문을 사용했고
입력된 문자열이 '.' (마침표)이면 while문이 종료되도록 했습니다.
한 줄씩 문자열이 주어지기 때문에 주어진 문자열 끝까지 for문으로 돌며 '(' 이거나 '['이면 스택에 쌓아줍니다.
만약 ')' 이거나 ']'일 경우는 pop() 을 해주는데 이때 스택에 아무것도 존재하지 않으면
괄호 조건이 어긋나기 때문에 err = 1 을 해줍니다.
for문을 끝마치고 스택에 괄호가 남아있거나 err 가 1이면 'no'를 출력하고
그렇지 않으면 'yes'를 출력합니다.