본문 바로가기
Problem Solving/BOJ

[Stack] 4949 균형잡힌 세상

by Bokoo14 2023. 1. 3.

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

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 각 줄은 마침표(".")로 끝난다

www.acmicpc.net

#2023.01.03
import sys
input = sys.stdin.readline

while(1):
    word = input().rstrip()
    if word=='.':
        break
    
    answer=0 
    stack=[]
    for i in word:
        if i=="(" or i=="[":
            stack.append(i)
        elif i==")":
            if len(stack)==0:
                answer=1
                break
            elif stack[-1]!="(":
                answer=1
                break
            else:
                stack.pop()
        elif i=="]":
            if len(stack)==0:
                answer=1
                break
            elif stack[-1]!="[":
                answer=1
                break
            else:
                stack.pop()
                
    if answer==0 and len(stack)==0:
        print("yes")
    else:
        print("no")

스택에 괄호를 저장

1. "(" or "["일때는 스택에 저장

2. ")" or "]"일때는 스택의 제일 위의 값을 비교하기

2-1. "("일때는 스택이 비어있지 않고, 스택의 제일 위 값이 ")"이어야 함

2-2. "]"일떄는 스택이 비어있지 않고, 스택의 제일 위의 값이 "]"이어야 함

 

2-1, 2-2를 만족하지 못한다면 answer=1로 바꿔주고

마지막에 "yes"를 출력할지, "no"를 출력할지 결정!

 

'Problem Solving > BOJ' 카테고리의 다른 글

[DP] 1912 연속합  (0) 2023.01.04
[Stack] 1874 스택 수열  (0) 2023.01.03
[Brute Force] 7568 덩치  (1) 2023.01.03
[DP] 11660 구간합구하기5  (1) 2023.01.02
[DP] 9465 스티커  (0) 2023.01.02