[PYTHON/파이썬] 4949 균형잡힌 세상 - ()[]{}<>

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

     

    4949번: 균형잡힌 세상

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

    www.acmicpc.net

    문제 풀이

    • 괄호의 종류를 딕셔너리로 저장한다.
      • {열린괄호:닫힌괄호}
    • 문자열의 문자를 하나씩 순회한다.
      • 만약 문자가 공백,알파벳,'.'이면 순회를 건너뛴다.
    • 스택을 이용해서 푼다.

    solution - 성공

    import sys
    
    while True:
      s = sys.stdin.readline().rstrip()
    
      # 입력값이 '.'이면 입력을 종료한다.
      if s == '.':
        break
      unit = {'(':')','[':']'}
      stack = []
    
      for i in s:
        # i가 문자,공백,온점이면 반복을 건너뛴다.
        if i.isalpha() or i == ' ' or i == '.':
            continue
        # 열린 괄호라면 i를 스택에 추가
        if i in unit.keys():
          stack.append(i)
    
        # 닫힌 괄호라면
        else:
          if stack: # 빈 스택이 아니면
            if unit[stack[-1]] == i: # 괄호의 짝도 맞으면
              stack.pop() # 스택의 마지막 요소를 제거
            else: # 괄호의 짝이 맞지 않으면 반복문 종료
              stack = True
              break
          else: # 닫힌 괄호고 빈 스택이면 반복문 종료
              stack = True
              break
    
      if stack : # 스택에 값이 있으면 
        print('NO')
      else: # 빈 스택이면
        print('YES')
        ```

     

    더 생각해보기

    - 만약 괄호가 (),[],{},<> 처럼 더 추가되면 괄호 딕셔너리에 추가만 하면 된다.

    unit = {'(' : ')', '{':'}','[':']','<': '>'}

    댓글