알고리즘
전형적인 스택 문제다. 우선 괄호의 여는 부분이 왼쪽으로 와야 하기 때문에, 문자열을 돌면서 ( 나 [ 일 때 스택에 넣어준다.
만약 스택에 값이 들어있는데 )나 ]가 들어오면 ( or [ 와 짝이 맞아야 하므로, 스택의 탑(stack[-1])을 통해 쌍이 맞는지 확인하고,
쌍이 맞다면 스택에서 여는 괄호를 팝해서 스택을 비워준다.
쌍이 아니라면 스택에 닫힌 괄호를 넣어준다. 이 알고리즘을 입력 받은 문자열을 모두 검사할 때까지 반복한다.
최종 코드
while True:
s = input()
if s == '.': break
stack = []
for i in range(len(s)):
if s[i] == '(' or s[i] == '[':
stack.append(s[i])
elif s[i] == ')':
if len(stack) != 0 and stack[-1] == '(':
stack.pop()
else:
stack.append(')')
break
elif s[i] == ']':
if len(stack) != 0 and stack[-1] == '[':
stack.pop()
else:
stack.append(']')
break
if len(stack) == 0 : print('yes')
else: print('no')
'PS > BOJ&Programmers' 카테고리의 다른 글
[백준/10809] 알파벳 찾기 | find() 찾고자 하는 문자의 인덱스를 반환 (0) | 2023.01.22 |
---|---|
[백준/1436] 영화감독 숌 (0) | 2023.01.22 |
[백준/14592] 2017 아주대학교 프로그래밍 경시대회(small) - 파이썬 (2) | 2023.01.18 |
[백준/13424] Three Dots / 완전탐색 - 파이썬 (0) | 2023.01.17 |
[백준/12759] 틱! 택! 토! - 파이썬 (1) | 2023.01.17 |