본문 바로가기
알고리즘/자료구조

[백준][Python] 4949번 균형잡힌 세상

by 임짠짠 2022. 2. 14.
반응형
 

4949번: 균형잡힌 세상

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

www.acmicpc.net

코드

import sys
while 1:
    inp = sys.stdin.readline().rstrip()
    stack = []
    error = 0
    if inp == ".":
        break
    else:
        for i in inp:
            if i == "(":
                stack.append(i)
            elif i == ")":
                if len(stack) == 0:   # 스택이 비어있으면 no 출력
                    error = 1
                    break
                else:
                    if stack[-1] == "(":  # 가장 최근 괄호가 ( 이면 
                        stack.pop()		# 스택에서 pop 해줌
                    else:
                        error = 1
                        break
            elif i == "[":
                stack.append(i)
            elif i == "]":
                if len(stack) == 0:
                    error = 1
                    break
                else:
                    if stack[-1] == "[":
                        stack.pop()
                    else:
                        error = 1
                        break
        if (error == 0) and (len(stack)==0):
            print("yes")            
        else:
            print("no")

 

 

설명

sys.stdin.readlin()으로 문자열을 입력받으면 마지막에 \n이 붙어서 저장되기 때문에 .rstrip()을 추가해서 제거해줘야 된다. 

스택을 이용해서 만약 "("이나 "["이 들어오면 스택에 push를 해주고, ")"나 "]"가 들어오면 현재 스택의 가장 위에 있는 값과 비교하여 같으면 그 값을 pop 해주고 다르면 괄호가 짝이 맞지 않는 것이기 때문에 error 변수를 1로 만들어준 후 break로 for문을 빠져나온다. 

for문을 나온 후 만약 error값이 1이 아니고 스택도 다 비어있으면 yes를 출력해주고 그렇지 않으면 no를 출력해준다. 

 

반응형

댓글