알고리즘/백준 문제풀이

[백준] 4949 균형잡힌 세상 파이썬 풀이 (스택)

자바칩 프라푸치노 2021. 6. 21. 17:06

코드

while True:
    string = input()
    if string == '.':
        break
    
    stack = []
    check = True
    for i in string:
        if i == '(' or i == '[': #stack에 넣음
            stack.append(i)
        elif i == ')':
            if stack and stack[-1] == '(': #stack이 안비었으면 
                stack.pop()
            else:
                check = False
                break
        elif i == ']':
            if stack and stack[-1] == '[': #stack이 안비었으면 
                stack.pop()
            else:
                check = False
                break
        
    if not stack and check: 
        print('yes')
    else:
        print('no')

풀이

(이나 [가 나오면 stack에 append하고

)이 나오면 stack이 안비었고 stack에 마지막이 (인지 확인해서 pop하고

비었으면 break (균형 안잡힌 세상)

마찬가지로 ]이 나왔을때도 똑같이 확인

 

그리고 문자열이 다 끝나고 나서 stack이 다 비워졌고 check가 true면 yes를 하고

(check는 문자를 끝까지 돌았는지 확인하기 위해 만든 변수이고

중간에 stack이 비었는데 )이나 ]이 나오면 check는 false가 된다)

아니라면 no를 출력한다.

728x90