코딩테스트 대비/단계별 코딩 테스트 준비(27일 과정)

[스택/Python] 4949번: 균형잡힌 세상 - 효과는 굉장했다!

bluetag_boy 2022. 2. 11. 21:20
반응형
 

4949번: 균형잡힌 세상

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

www.acmicpc.net

 

알고리즘 분류

  • 자료 구조
  • 문자열
  • 스택

 

 

SOLUTION

import sys

while True: 

    s = sys.stdin.readline().rstrip()
    if s == '.': # .이 입력으로 들어오기전까지 while문 반복
        break

    string = []
    state = True 
    for i in s:
        if i == '(' or i == '[': # 괄호와 '.' 을 제외한 나머지 문자는 고려X
            string.append(i)

        elif i == ')':
            if string == [] or string[-1] == '[': # string이 비었거나 string에 가장 마지막에 들어간 값이 '(' 이 아닌 '[' 일 때
                state = False # 균형이 일어나지 않으므로 state = False
                break 

            elif string[-1] == '(': 
                string.pop() # 균형을 이루었으므로 string안의 '(' 를 pop하여 제거

        elif i == ']':
            if string == [] or string[-1] == '(': # 위와 같은 방법
                state = False
                break

            elif string[-1] == '[':
                string.pop()

    if state == True and string == []: # 위 조건을 만족하면 yes 출력
        print('yes')
        
    else:
        print('no')