[BOJ](python) 4949 _ 균형잡힌 세상

berry ·2022년 3월 7일
0

Algorithm

목록 보기
62/77
post-thumbnail

🧩문제


🧩 문제 설명

1. '(' 와 '['가 나올 경우

  • 괄호가 시작하므로 스택에 쌓음

2. '(' 나왔을 때

  • ')' 가 나오면 괄호 완성되기 때문에 스택에서 '(' pop
  • '(' 을 pop하려면 스택이 비어있으면 안되기 때문에 len(stack) > 0
  • ')' 이외의 다른 괄호가 나오면 괄호의 완성이 되지 않은 것이므로 no 출력
  • len(stack) == 0이면 오류가 나므로 no 출력 (시작 괄호로 시작하지 않고 끝 괄호로 시작하는 경우)

3. '[' 나왔을 때

  • ']'가 나오면 괄호 완성되기 때문에 스택에서 '[' pop
  • '[' 을 pop하려면 스택이 비어있으면 안되기 때문에 len(stack) > 0
  • ']' 이외의 다른 괄호가 나오면 괄호의 완성이 되지 않으므로 no 출력
  • len(stack) == 0이면 오류가 나므로 no 출력 (시작 괄호로 시작하지 않고 끝 괄호로 시작하는 경우)

4. '.'이 나오면 입력 종료

  • 단순히 .이 나온다고 바로 끝나는 것이 아닌
    단어나 공백이 하나도 없을 때 종료

🏁 내 풀이

import sys
input = sys.stdin.readline

while True:
    s = input().rstrip()
    stack = []
    flag = True

    if s == ".": # 문장이 단순히 .이면 종료
        break

    for i in s: 
        if i == '(' or i == '[': # 열린 괄호가 나오면 
            stack.append(i) # 스택에 저장
        
        elif i == ')': # 닫힌 괄호가 나오면 
            if stack and stack[-1] == '(': # 스택에 괄호가 있고, top이 ( 이라면 괄호가 완성되므로
                stack.pop() # 스택에서 ( 제거
            else: # 스택이 비었거나, top과 함께 괄호가 완성되지 않는다면
                flag = False # No
                break
            
        elif i == ']': 
            if stack and stack[-1] == '[':
                stack.pop()
            else:
                flag = False
                break
            
    if flag and not(stack): # flag가 True이고, 스택에 아무것도 없으면 (괄호들이 완성되어서 다 제거되었으면)
        print('yes')
    else: # 아닐 경우 (flag=False or len(stack) >0)
        print('no')

yes, no를 대문자로 출력하는 어이없는 실수로
두 시간이나 코드를 뜯어보았다^^..
덕분에 다신 이런 실수 없음! 🤒

profile
Engineer

0개의 댓글