• 방법 1. 틀림.. 반례: ( ) ) ( ( )
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
data = input().rstrip()
if data.count("(") == data.count(")"):
print("YES")
else:
print("NO")
• 방법 2. 정답!!
import sys
input = sys.stdin.readline
t = int(input())
for _ in range(t):
data = input().rstrip()
while(True):
if "()" in data: # 문자열에 () 가 있으면
data = data.replace("()", "") # 문자열에서 () 를 제거한다
else: # 더이상 ()가 없으면
break # 탈출
if len(data) == 0: # ()를 제거한 문자열에 아무것도 없으면
print("YES") # VPS 임
else:
print("NO")
• 처음엔 "("의 수와 ")"의 수가 같으면 되지 않을까 해서 방법 1 처럼 했으나 반례가 있었다.
())(()의 경우 두 괄호의 개수가 같지만 VPS는 아니다.
• 생각해보니 보이는 모든 () 를 제거했을때 괄호가 남으면 VPS가 아니라는 생각이 들었다.
따라서 방법 2처럼 하니 성공했다.