CodingTest/Baekjoon

[baekjoon] 백준 4949번(파이썬): 균형잡힌 세상

JunJangE 2021. 9. 22. 12:17

문제

 

4949번: 균형잡힌 세상

하나 또는 여러줄에 걸쳐서 문자열이 주어진다. 각 문자열은 영문 알파벳, 공백, 소괄호("( )") 대괄호("[ ]")등으로 이루어져 있으며, 길이는 100글자보다 작거나 같다. 입력의 종료조건으로 맨 마

www.acmicpc.net

알고리즘

- 입력받은 문자열이 점 하나일 때까지 반복한다.

- for문을 통해 입력받은 문자열을 확인한다.

- 코드를 보면 이해하기 쉬울 것 같다.

코드

import sys

while True:
    c = str(sys.stdin.readline().rstrip())
    stack = []

    # 점 하나가 들어오면 반복문을 멈춰준다.
    if c == ".":
        break

    # 반복문을 통해 입력받은 문자열을 확인한다.
    for i in c:

        # '('와 '[' 를 스택에 추가한다.
        if i == '(' or i == "[":
            stack.append(i)

        # 입력받은 문자가 ')'라면
        elif i == ')':
            # 스택에 요소가 있고 스택의 마지막 요소가 '('라면
            # 괄호가 균형이 맞으므로 스택 맨 뒤에 있는 '(' 요소를 팝해준다.
            if stack and stack[-1] == '(':
                stack.pop()

            # 그게 아니라면 균형이 맞지 않으므로 스택에 요소를 하나 추가하고 반복을 멈춰준다.
            else:
                stack.append(i)
                break
        # 입력받은 문자가 ']'라면
        elif i == ']':
            # 스택에 요소가 있고 스택의 마지막 요소가 '['라면
            # 괄호가 균형이 맞으므로 스택 맨 뒤에 있는 '[' 요소를 팝해준다.
            if stack and stack[-1] == '[':
                stack.pop()

            # 그게 아니라면 균형이 맞지 않으므로 스택에 요소를 하나 추가하고 반복을 멈춰준다.
            else:
                stack.append(i)
                break

    # 스택 안에 요소가 있으면 no 를, 없으면 yes 를 출력한다.
    if stack:
        print("no")
    else:
        print("yes")

github

 

GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법

내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.

github.com