[python_파이썬_참고pass]백준_4949번_균형잡힌세상_실버4_풀이

2024. 10. 9. 22:44코드리뷰

728x90
반응형

공부하는허딩크 : https://www.youtube.com/live/Xx_DRXY3r2Q?feature=shared

스스로 풀지 못해서 30분이 초과되어 구글링을 통해 해결했다.

 

1. stack의 개념으로 먼저 발생된 시작되는 괄호를 answer에 저장해주고

2. 짝이 맞는 괄호가 생기면 .pop으로 리스트를 비워둔다.

3. 짝이 맞지 않는 괄로가 생기면 answer 유지

4. 최종 answer가 비어 있으면 yes출력 아니면 no출력

 

해당 개념을 기억해야 할 것 같다.

()와 []는 짝으로 오기 때문에

1. 나는 ( ) [ ] 일때와 ( [ ] ) 이거를 어떻게 구분할지 고민했다. 

   별도 변수 answer를 두고 ( 먼저 저장하고 다음 [ 이게 나오면 또 저장한 후 짝이 맞는 ]가 나와야 정상이 되는 거니까

   짝이 맞으면 answer에서 [ 를 삭제하는 것이다.

 아직 100%이해는 가지 않지만 기억해두자!

import sys
input = sys.stdin.readline

# pop, append사용 변수 추가
while True:
   
    str_list = input().rstrip()
    if str_list == ".":
        break
   
    check_str = []

    for i in str_list:
        if i.isalpha() or i == ' ':
            continue
        else:
            check_str.append(i)

    if check_str[-1] != ".":
        print("no")

    check_str.pop()

    answer = []
    for i in check_str:
        if i == "(" or i == "[":
            answer.append(i)
        elif i == ")":
            if len(answer) != 0 and answer[-1] == "(":
                answer.pop()
            else:
                answer.append(")")
                break
        elif i == "]":
            if len(answer) != 0 and answer[-1] == "[":
                answer.pop()
            else:
                answer.append("]")
                break
           
    if len(answer) == 0:
        print("yes")
    else:
        print("no")

 

 

<다른 사람 풀이 참고>

while True :
    a = input()
    stack = []

    if a == "." :
        break

    for i in a :
        if i == '[' or i == '(' :
            stack.append(i)
        elif i == ']' :
            if len(stack) != 0 and stack[-1] == '[' :
                stack.pop() # 맞으면 지워서 stack을 비워줌 0 = yes
            else :
                stack.append(']')
                break
        elif i == ')' :
            if len(stack) != 0 and stack[-1] == '(' :
                stack.pop()
            else :
                stack.append(')')
                break
    if len(stack) == 0 :
        print('yes')
    else :
        print('no')
728x90
반응형