Python 백준 9021 괄호
import sys
input = sys.stdin.readline
n = int(input())
def vps(string):
stack = []
for i in string:
if len(stack) == 0 and i == ')':
return 'NO'
if i == '(':
stack.append(i)
else:
if stack[-1] == '(':
stack.pop()
else:
return 'NO'
if len(stack) == 0:
return 'YES'
return 'NO'
for i in range(n):
word = input().strip()
print(vps(word))
스택을 이용해서 풀 수 있는 문제다.
받은 문자열에서 '(' 은 빈리스트인 stack에 넣어주고,
' ( ' 가 올 경우는 2 가지로 나뉜다.
stack의 길이가 0일 때 즉 stack에 '('가 들어오지 않았는데 ')'가 올 경우 NO를 return 한다.
stack의 -1번쨰 즉 끝부분이 '('인 경우엔 짝이 맞으니 pop으로 stack의 끝 부분을 제거해 주면 되고,
그게 아니라면 NO를 return 한다.
for문이 다 돌고 나서,
stack의 길이가 0이면, 짝이 맞는 것이니 YES를 리턴하고,
그게 아니라면 NO를 리턴한다.
마지막 for문은 입력값과 vps함수를 돌리기 위한 코드
'Back > Algorithm' 카테고리의 다른 글
Python 백준 2108 통계학 (0) | 2021.03.15 |
---|---|
파이썬 알고리즘 백준 2609 (0) | 2021.03.14 |
백준 9461 파도반 수열 / 파이썬 알고리즘 (0) | 2021.03.13 |
Python 백준 4948 베르트랑 공준 / 파이썬 알고리즘 (0) | 2021.03.12 |
Python 백준 알고리즘 2839 설탕배달 파이썬 (0) | 2021.03.12 |