Baekjoon

4949. 균형 잡힌 세상

영끼끼 2025. 2. 14. 09:08

https://www.acmicpc.net/problem/4949

 

#세팅 값
import sys
sys.stdin = open('solve.txt')
input = sys.stdin.readline


def check_balance(line):
    stack = [] # 문자열을 저장할 스택
    for c in line:
        # 입력받은 문자열을 순회하면서 ([ 이 있다면 스택을 쌓아둔다.)
        if c in '([':
            stack.append(c)
        #만약에 c 가 ) 일 경우
        # 스택에 맨 위에 있는게 ( 이 아니거나
        # 스택에 아무것도 없다면 no 를 리턴한다.
        elif c == ')':
            if not stack or stack[-1] != '(':
                return 'no'
            stack.pop()
        # 위와 같은 논리로 진행한다.
        elif c == ']':
            if not stack or stack[-1] != '[':
                return 'no'
            stack.pop()

    # 다 끝내고 나서 만약에 stack에 아무것도 없다면 yes, 아닐 경우 no를 최종적으로 리턴
    return 'yes' if not stack else 'no'

while True:
    # 줄바꿈을 기준으로 input 값을 넣어 놓는다.
    line = input().strip('\n')
    if line == '.':
        break # 탈출 조건
    print(check_balance(line))

 

왜 스택 하나로도 두가지 문자를 처리가 가능할까?

 

스택은 후입선출(LIFO) 구조라, 가장 최근에 들어간(열린) 괄호부터 닫아줘야 합니다.

어떤 괄호인지((인지 [인지) 저장하고, 닫힐 때만 그 짝을 확인하면 되므로 하나의 스택으로도 충분합니다.

'Baekjoon' 카테고리의 다른 글

2164. 카드 2  (0) 2025.02.19
18258. 큐 2  (0) 2025.02.19
1157. 단어 공부  (0) 2025.02.19
21862. 사각형 그리기 게임  (4) 2025.02.17
1018. 체스판 다시 칠하기  (0) 2025.02.13