룰루코딩

백준 4949 균형잡힌 세상 본문

백준

백준 4949 균형잡힌 세상

rulru01 2024. 10. 27. 20:03

문제


솔루션

while(True):
    text = input()
    if(text == "."):
        break
    stack = []


    for i in text:
        if(i == "(" or i == "["):
            stack.append(i)
        if(i == ")"):
            if(len(stack) != 0 and stack[-1] == "("):
                stack.pop()
            else:
                stack.append(")")
                break
        if(i == "]"):
            if(len(stack) != 0 and stack[-1] == "["):
                stack.pop()
            else:
                stack.append("]")
                break


    if(len(stack) == 0):
        print("yes")
    else:
        print("no")

깨달은점

문장에서 괄호의 짝이 올바른지를 확인하기위해 스택을 이용해야했다.

    for i in text:
        if(i == "(" or i == "["):
            stack.append(i)
        if(i == ")"):
            if(len(stack) != 0 and stack[-1] == "("):
                stack.pop()
            else:
                stack.append(")")
                break
        if(i == "]"):
            if(len(stack) != 0 and stack[-1] == "["):
                stack.pop()
            else:
                stack.append("]")
                break

이 부분이 핵심으로

( 또는 [ 나오면 stack에 추가하여 기록해두고

)나 ]가 나오면 stack에서 마지막 괄호가 올바른 짝인지 확인해 맞으면 pop로 스택에서 제거한다.

stack이 비어 있거나 짝이 맞지 않으면 잘못된 괄호 구조로 스택에 추가하고 break을 통해 반복을 중단한다.

그 후 스택의 길이에 따라 0으로 다 없어지지 않았으면 no를 출력하고 스택이 비어있으면 yes를 출력하는 구조이다.

'백준' 카테고리의 다른 글

백준 1100 하얀 칸  (0) 2024.10.27
백준 1874 스택 수열  (0) 2024.10.27
백준 1966 프린터 큐  (0) 2024.10.27
백준 18258 큐2  (0) 2024.10.26
백준 28278 스택2  (0) 2024.10.14