문제 링크
풀이
def vps(ps):
left = 0
for i in ps:
if i == "(": left += 1
else:
left -= 1
if left < 0: return "NO"
if left == 0: return "YES"
else: return "NO"
n = int(input())
for i in range(n):
print(vps(input()))
for문에서 여는 괄호가 나올 때마다 left를 증가시키고, 닫는 괄호가 나올 때마다 left를 감소시킨다. 닫는 괄호가 나온 후에 left가 음수라면, 앞서 등장한 여는 괄호보다 닫는 괄호의 수가 더 많은 것이므로 그 즉시 VPS가 될 수 없음을 알 수 있다.
for문을 빠져나온 후에는 여는 괄호와 닫는 괄호의 수가 일치하는지 확인한다(left가 0이면 일치). 일치하면 VPS고, 일치하지 않으면 VPS가 아니다.
'연습장 > 백준(BOJ) 문제풀이' 카테고리의 다른 글
[백준 1920] 수 찾기 with Python (0) | 2021.03.31 |
---|---|
[백준 2231] 분해합 with Node.js (0) | 2021.03.30 |
[백준 10828] 스택 with Python (0) | 2021.03.26 |
[백준 10870] 피보나치 수 5 with Node.js (0) | 2021.03.26 |
[백준 2798] 블랙잭 with Node.js (0) | 2021.03.25 |