[백준 #4949] 균형잡힌 세상

MJ·2021년 7월 13일
0

알고리즘(PS)

목록 보기
18/30

1. 문제 설명

2. 해설

스택 활용의 바이블같은 문제로, 스택을 활용하여 괄호가 잘 닫겼는지 검사하면 된다. 문장의 길이는 상관없고, 문장을 한 글자씩 검사하면서 열리는 괄호일 경우 스택에 삽입하고, 닫히는 괄호의 경우 스택의 끝을 검사해서 짝이 맞을 경우 그대로 pop해주면 된다. 그러니까, 닫히는 괄호가 들어왔는데 짝이 안 맞거나 스택이 비어있으면 (ex: [(]), )) 그 문장은 균형잡히지 못했다는 거다. 또는 문장을 끝까지 검사했는데 stack이 비어있지 않은 경우(ex: (((())))도 균형잡히지 못한 것이다. 그래서, 이런 로직을 코드에 잘 반영해주면 되겠다.

3. 코드

import sys
input = sys.stdin.readline

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

    for c in s:
        if c == "(" or c == "[":
            stack.append(c)
        elif c == ")":
            if not stack or stack.pop() != "(":
                stack.append(c)
        elif c == "]":
            if not stack or stack.pop() != "[":
                stack.append(c)

    if stack:
        print("no")
    else:
        print("yes")
profile
오늘보다 내일을 더 즐겁게

0개의 댓글