4949번 : 균형잡힌 세상

김민관·2021년 10월 6일

백준_Silver

목록 보기
16/57

문제보기

파이썬

while True:
    s = input()
    if s == '.':
        break
    stk = []
    temp = True
    for i in s:
        if i == '(' or i == '[':
            stk.append(i)
        elif i == ')':
            if not stk or stk[-1] == '[':
                temp = False
                break
            elif stk[-1] == '(':
                stk.pop()
        elif i == ']':
            if not stk or stk[-1] == '(':
                temp = False
                break
            elif stk[-1] == '[':
                stk.pop()
    if temp == True and not stk:
        print('yes')
    else:
        print('no')

코드 설명

  • 먼저 '('이나 '['를 처음에 만나면 stack 배열에 넣어줌
  • ')'를 만났을때 배열의 끝이 '['이면 ']'가 없으므로 균형잡히지 않음
  • ']'를 만났을때 배열의 끝이 '('이면 ')'가 없으므로 균형잡히지 않음
  • 제대로 짝이 지어졌으면 pop으로 빼버리기
  • 마지막에 배열이 비어있으면 균형잡힌 문자열

포인트

스택을 이용해서 푸는 대표적인 괄호검사 문제. 조금 헤맸다.

profile
게임 개발일지 & IT 소식들 공유

0개의 댓글