알고리즘

[백준] 4949 균형잡힌 세상 Python

아람2 2025. 2. 17. 17:00
반응형

1. 문제 

영문 알파벳, 공백, 소괄호와 대괄호로 이루어져 있는 문자열에서
소괄호와 대괄호가 짝을 이루는지 판단하는 프로그램

 

 

2. 제한

시간 제한 1초 
메모리 제한 128MB 

 

3. 알고리즘 분류 

* 자료 구조

* 문자열 

* 스택 

 

4. 접근 방식 

9012 괄호 https://www.acmicpc.net/problem/9012 문제는

간단하게 stack 를 이용해서 ( 이면 stack 에 넣고, ) 이면 pop 해서 짝을 맞췄는데 

괄호의 종류가 두 개가 되니 ) 이면 ( 이랑 맞추고 ] 이면 [ 와 맞추는 작업을 추가했다 

 

5. 전체 코드 w/ Python 

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

# 영문 알파벳, 공백, 소괄호와 대괄호로 이루어져 있는 문자열에서
# 소괄호와 대괄호가 짝을 이루는지 판단하는 프로그램 

def is_vps(s):
    stack = []

    for c in s:
        if c in "([":
            stack.append(c)
        elif c == ")":
            # Stack 이 비었거나 짝이 맞지 않는 경우 NO 
            if not stack or stack[-1] != "(":
                return "no"
            # 짝이 맞으면 Pop 
            stack.pop()
        elif c == "]":
            if not stack or stack[-1] != "[":
                return "no"
            stack.pop()

    if not stack:
        return "yes"
    else:
        return "no"

if __name__ == '__main__':
    while True:
        line = input()
        if line == '.':
            break
        print(is_vps(line))
반응형