문제풀이/백준

[python/파이썬] 백준 4949 - 균형잡힌 세상 (실4)

bbugi 2023. 7. 19. 12:34

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

 

4949번: 균형잡힌 세상

각 문자열은 마지막 글자를 제외하고 영문 알파벳, 공백, 소괄호("( )"), 대괄호("[ ]")로 이루어져 있으며, 온점(".")으로 끝나고, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마지막에

www.acmicpc.net


자료구조 - 스택(stack)

+

정규표현식

 

---

 

1. 스택(리스트)의 인덱스 슬라이싱 범위 제대로 이해하기

2. 문제 제대로 이해하기

처음엔 괄호, 대괄호를 구분하여 각자의 쌍이 맞으면 된다고 접근했으나, 한 문장 안에서 쌍이 맞아야 함.

(), [] 만 인정되고, 똑같은 구성이더라도 (], [) 이면 틀린 것

3. stack이 후입선출 이므로 괄호를 넣으면서 쌍을 이루면 바로 빼주는 식으로 접근. 남아있는 괄호(대괄호)가 있다면 쌍이 맞지 않는다는 것

4. 문장 입력 받을 떄 괄호만 남기는 것을 정규표현식을 사용하여 접근함.

문제에서 주어지기를 괄호를 제외하고는 영어 소문자, 대문자만 주어지기 때문에 정규식을 통해 영어 대소문자, 띄어쓰기는 ""(빈값)으로 변환시켜 줌


[풀이 과정 - 풀면서 잘못된 부분은 주석처리하면서 이해함]

import re

while True:
    bracket = [] # 괄호 수집
    # sq_bracket = [] # 대괄호 수집
    sentence = input().split('.')
    sen = re.sub("[a-zA-Z ]", "", sentence[0])
    
    if len(sentence[0]) == 0:
        break
    
    elif sentence[0] == ' ':
        print('yes')
    
    else:
        for i in sen:
            if i == '(' or i == ')' or i == '[' or i == ']':
                bracket.append(i)
                for j in range(1, len(bracket)):
                    # print('여긴가?',bracket[j-1:j+1])
                    # print('이거는?', ''.join(bracket[j-1:j+1]))
                    if ''.join(bracket[j-1:j+1]) == '()' :
                        bracket.pop()
                        bracket.pop()
                    elif ''.join(bracket[j-1:j+1]) == '[]' :
                        bracket.pop()
                        bracket.pop()
                    # print('결과?', bracket)
            # elif i == '[' or i == ']' :
            #     sq_bracket.append(i)
            #     for j in range(1, len(sq_bracket)):
            #         if ''.join(sq_bracket[j-1:j+1]) == '[]' :
            #             sq_bracket.pop()
            #             sq_bracket.pop()
            #         else:
            #             pass
                    # print('[]결과는?', sq_bracket)
                            
        # print(bracket)
        if len(bracket) == 0:
            print('yes')
        else:
            print('no')