알고리즘/백준-파이썬
[백준] 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문으로 처리한다.