[백준] 9012 괄호

nikevapormax·2022년 4월 4일
0

baekjoon

목록 보기
3/7

🦧출처

백준 9012


🦧개념

🔥 스택(stack)

스택은 데이터를 임시 저장할 때 사용하는 자료구조로, 후입선출(LIFO) 방식이다.
파이썬에는 기본적으로 스택이 구현되어 있지 않아 list를 활용한다.

스택에 데이터를 넣는 작업을 push라고 하며, list를 활용하기 때문에 list.append(a)를 활용한다.
이와 반대로 스택에 넣어진 데이터를 제거하는 작업을 pop이라 하며, list.pop(a)을 활용한다.

🔥 아이디어
ps에 입력된 괄호들이 vps가 되는 조건은 두 괄호들이 다음과 같이 짝이 맞게 되는 경우이다.
()

나의 경우 괄호들을 눈으로 보고 판단할 때는 중앙에서부터 짝이 맞는지 찾아갔다. (물론 해당 방법 자체가 틀렸을 수도 있다.) 이것을 코딩으로 구현할 능력이 되지 않았고 그다지 효율적일 것 같이 않다는 생각에 확실하게 맞는 친구들부터 지워가며 하기로 했다.

해당 가정을 바탕으로, '('가 입력된다면 그것을 stack에 저장하고 짝인 ')'가 들어오게 된다면 stack을 비워주었다. 결국 vps가 되고 싶다면 stack에 아무것도 존재하지 않으면 되는 것이다.


🦧코드

🔥 나의 코드

import sys

n = int(sys.stdin.readline())

for _ in range(n):
    stack = []
    ps = sys.stdin.readline()
    for p in ps:
        if p == '(':
            stack.append(p)
        elif p == ')':
            if len(stack) > 0:
                stack.pop()
            else:
                print("NO")
                break
    else:
        if len(stack) == 0:
            print("YES")
        else:
            print("NO")

profile
https://github.com/nikevapormax

0개의 댓글