[백준 파이썬] 4949 균형잡힌 세상

RG-Im·2023년 4월 12일
1

알고리즘

목록 보기
1/28

백준 4949

스택에 "("랑 "["만 추가하면서 입력이 스택 마지막에 있는 값이랑 매칭이 되는지 확인하면 된다.

import sys
while True:
    S = sys.stdin.readline().rstrip()
    if S == '.':
        break
        
    stack = []
    for s in S:
        if s not in ['(', ')', '[', ']']: # 소괄호, 대괄호만 확인
            continue
        if stack and stack[-1] == '(' and s == ')': # 스택에 마지막 값이 "("라면 ")"가 와야 매칭이 된다.
            stack.pop() # 매칭이 된다면 스택에서 제거
        elif stack and stack[-1] == '[' and s == ']': #"["도 마찬가지
            stack.pop()
        else:
            stack.append(s)

    if len(stack) == 0:
        print('yes')
    else:
        print('no')

라고 쉽게 풀줄 알았는데..

반례 이것저것 넣어봤지만 다 제대로 나오길래 설마 싶었다.
처음에는 입력을 받을 때

S = sys.stdin.readline().strip()

로 받았는데 이러면 " ."을 입력 받았을 때 좌우 공백이 다 사라져 "."로 들어가 밑에 코드를 실행하지 않고 종료되버린다.
strip()rstrip()으로 수정해 오른쪽의 개행문자만 제거하도록 수정해준다.

solved.ac 기준 class 2에 있는 9012번 문제10773번 문제도 같은 방법으로 풀어주면 된다.

profile
공부 저장용

0개의 댓글