[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 = {'(' : ')', '{':'}','[':']','<': '>'}

댓글