백준 4949 - 균형잡힌 세상 (Python)
2023. 7. 28. 06:19ㆍ알고리즘
문제
https://www.acmicpc.net/problem/4949
4949번: 균형잡힌 세상
각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에
www.acmicpc.net
풀이
while True:
text = input()
b = []
if text == '.':
break
for c in text:
if c == '(' or c == '[':
b.append(c)
elif c == ')':
if b and b[-1] == '(':
b.pop()
else:
b = ['no']
break
elif c == ']':
if b and b[-1] == '[':
b.pop()
else:
b = ['no']
break
if len(b) == 0:
print('yes')
else:
print('no')
각 테스트 케이스의 문자열에 대하여
앞에서 부터 탐색하여, 문자가 "(" 또는 "[" 이면 리스트에 저장해둔다.
")" 가 입력되었을 때 리스트의 마지막 값이 "(" 이면 제거해주고, 아니면 no를 반환해준다.
마찬가지로 "]" 가 입력되었을 때 리스트의 마지막 값이 "[" 이면 제거해주고, 아니면 no를 반환해준다.
모든 괄호가 쌍이 맞아서 사라졌으면 yes를 출력해주면 된다.
괄호를 저장해두는 b가 스택과 비슷하게 동작한다(LIFO)