[백준 4949번-파이썬] 균형잡힌 세상
알고리즘 공부/BOJ백준 풀이

[백준 4949번-파이썬] 균형잡힌 세상

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')

{설명}

이 문제는 간단한 스택 문제로 뭘 스택에 넣고 뭘 무시하면 되는지 파악하면 간단히 풀 수 있는 문제입니다.

먼저 문자열을 입력받은 후 하나씩 돌면서 만약

  1. 괄호-()[]가 아니라면 무시하면 되고
  2. (나 [라면 스택에 추가
  3. )나 ]라면 현재 스택의 맨 위에 있는 문자가 )라면 (, ]라면 [일때 스택에서 빼면 되며
  4. 아니라면 스택에 아무거나 추가해서(반복문을 나갔을때 하나라도 있어야 코드를 줄일 수 있기 때문에) 반복문을 나가면 됩니다.

만약 스택에 아무것도 없다면 모든 괄호가 균형을 이루었기 때문에 yes를 출력하고 아니라면 no를 출력하면 됩니다.