sm 기술 블로그

154. 4949(균형잡힌 세상) - 파이썬 본문

문제/백준_파이썬

154. 4949(균형잡힌 세상) - 파이썬

sm_hope 2022. 7. 22. 12:21
while True:
    S = input()
    stack = []

    if(S == "."):
        break

    for val in S:
        if val == '[' or val == '(':
            stack.append(val)
        elif val == ']':
            if stack and stack[-1] == '[':
                stack.pop()
            else:
                stack.append(1)
                break
        elif val == ')':
            if stack and stack[-1] == '(':
                stack.pop()
            else:
                stack.append(1)
                break

    if not stack:
        print("yes")
    else:
        print("no")

문제요약

문자 형식이 맞는지 확인하고 맞으면 yes 틀리면 no를 출력하라.

설명

stack을 이용하면 쉽게 풀 수 있다.

 

    if(S == "."):
        break

조건중에 . 이 들어온다면 프로그램을 종료한다. 

 

        if val == '[' or val == '(':
            stack.append(val)

값이 만약 [ 혹은 ( 라면 그 값은 스택에 저장한다.

 

        elif val == ']':
            if stack and stack[-1] == '[':
                stack.pop()
            else:
                stack.append(1)
                break

만약 ']' 인 경우 스택이 비어 있지 않고 스택에 맨 마지막이 '[' 일 경우 pop을 통해 꺼낸다.

위에 해당되지 않는 경우에는 1을 집어 넣는다.

 

        elif val == ')':
            if stack and stack[-1] == '(':
                stack.pop()
            else:
                stack.append(1)
                break

만약 ')' 인 경우 스택이 비어있지 않고 스택에 맨 마지막이 '('일 경우 pop을 통해 꺼낸다.

위에 해당되지 않는 경우에는 1을 집어 넣는다.

 

    if not stack:
        print("yes")
    else:
        print("no")

스택이 비어있다는 것은 완벽한 문자열이라는 뜻으로 yes를 출력한다.

만약 그렇지 않으면 no를 출력한다.

'문제 > 백준_파이썬' 카테고리의 다른 글

156. 17298(오큰수) - 파이썬  (0) 2022.07.25
155. 1874(스택 수열) - 파이썬  (0) 2022.07.22
153. 9012(괄호) - 파이썬  (0) 2022.07.21
152. 10773(제로) - 자바  (0) 2022.07.20
152. 10773(제로) - 파이썬  (0) 2022.07.20
Comments