알고리즘/백준-파이썬

[백준] 9012번 (python 파이썬)

배불뚱이 2022. 4. 4. 04:28

https://www.acmicpc.net/problem/9012

 

9012번: 괄호

괄호 문자열(Parenthesis String, PS)은 두 개의 괄호 기호인 ‘(’ 와 ‘)’ 만으로 구성되어 있는 문자열이다. 그 중에서 괄호의 모양이 바르게 구성된 문자열을 올바른 괄호 문자열(Valid PS, VPS)이라고

www.acmicpc.net

 

import sys

testcase = int(input())

for i in range(testcase):
    ps = sys.stdin.readline().strip()
    stack_count = 0
    for c in ps:
        if c == "(":
            stack_count += 1
        elif stack_count <= 0:
            print("NO")
            break
        else:
            stack_count -= 1
    else:
        if stack_count:
            print("NO")
        else:
            print("YES")

 

"(" 와 ")" 가 서로 짝이 맞으면 "YES"를 출력, 맞지 않으면 "NO"를 출력하는 문제이다.

잘 생각해보면 스택문제이다.

자바스크립트의 실행 컨텍스트 스택을 생각해보면 된다.

 

위의 코드에서는 stack_count로 스택을 정의했지만, 파이썬의 스택 자료구조인 리스트를 이용하면 더욱 쉽게 풀 수 있다.

 

import sys
testcase = int(input())

for i in range(testcase):
  temp = []
  s = sys.stdin.readline().strip()
  try:
    for c in s:
      if c == "(":
        temp.append(0)
      else:
        temp.pop()
    if not(temp): print("YES")
    else: print("NO")
  except:
    print("NO")

 

"(" 가 나오면 임시 리스트(스택)에 추가(push)하고 ")" 가 나오면 제거(pop)하면 된다.

이 과정에서 생기는 에러(언더플로우)는 일일이 신경쓰지말고 try-except문으로 처리한다.