http://acmicpc.net/problem/4949
{코드}
while True:
s = input()
if s == '.':
break
st = []
for i in s:
if i not in '()[]':
continue
if i == '(' or i == '[':
st.append(i)
elif (i == ')' and st and st[-1] == '(') or (i == ']' and st and st[-1] == '['):
st.pop()
else:
st.append(0)
break
print('no' if st else 'yes')
{설명}
이 문제는 간단한 스택 문제로 뭘 스택에 넣고 뭘 무시하면 되는지 파악하면 간단히 풀 수 있는 문제입니다.
먼저 문자열을 입력받은 후 하나씩 돌면서 만약
- 괄호-()[]가 아니라면 무시하면 되고
- (나 [라면 스택에 추가
- )나 ]라면 현재 스택의 맨 위에 있는 문자가 )라면 (, ]라면 [일때 스택에서 빼면 되며
- 아니라면 스택에 아무거나 추가해서(반복문을 나갔을때 하나라도 있어야 코드를 줄일 수 있기 때문에) 반복문을 나가면 됩니다.
만약 스택에 아무것도 없다면 모든 괄호가 균형을 이루었기 때문에 yes를 출력하고 아니라면 no를 출력하면 됩니다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 18870번-파이썬] 좌표 압축 (0) | 2021.06.14 |
---|---|
[백준 10773번-파이썬] 제로 (0) | 2021.06.14 |
[백준 2580번-파이썬] 스도쿠 (0) | 2021.06.14 |
[백준 1062번-파이썬/Python] 가르침 (0) | 2021.06.04 |
[백준 19942번-파이썬] 다이어트 (0) | 2021.05.08 |