[알고리즘] 백준 4949번 : 균형잡힌 세상 (파이썬)

조승후·2022년 11월 18일
0

알고리즘

목록 보기
4/15
post-thumbnail

백준 4949번 : 균형잡힌 세상
난이도 : 실버 4

-문제 소개




-코드

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

-해설

스택을 이용해서 풀 수 있는 문제입니다. 처음으로 조건을 달아줄 것은 .이 하나만 들어왔을 때 프로그램을 종료하는 것인데요, 이를 if s == ".": break 를 통해서 구현했습니다. 그 뒤로 stack 리스트와 tmp라는 변수를 선언해줍니다. 제가 처음 문제를 풀 때, tmp를 사용하지 않고 구현하려 했었는데, 틀렸다고 떴었습니다. 그래서 tmp를 이용해서 플래그를 세워주었습니다. 이후의 for문 내에서 내용은 열린 괄호가 입력되었을 때는 stack에 넣어주고, 닫는 괄호일 때 조건을 달아서 stack에 들어가있는 열린 괄호들을 pop()시켜주거나 tmp를 False로 바꿔주었습니다. 그런 다음 마지막 조건에서 스택이 비어있고, tmp가 True라면 "yes"를 출력하고 그 외에는 모두 "no"를 출력해줍니다.

0개의 댓글