[BOJ]9012:かっこ



🔒 例

>> 6
>> (())())
>> (((()())()
>> (()())((()))
>> ((()()(()))(((())))()
>> ()()()()(()()())()
>> (()((())()(

NO
NO
YES
NO
YES
NO

>> 3
>> ((
>> ))
>> ())(()

NO
NO
NO

🔧 に答える

1. n = int(sys.stdin.readline().rstrip())
2. case = list(sys.stdin.readline().rstrip())
	2.1 cases[i] == 여는 괄호, s.push
    2.2 cases[i] == 닫는 괄호, s.pop
3. NO가 출력되는 경우, flag 활용
    2.3 stack empty일 때 pop 시도
    2.4 모든 괄호에 대한 연산 종료 후, stack에 값이 남아있는 경우

🔑 答案用紙

import sys

n = int(sys.stdin.readline().rstrip())
for _ in range(n):
    case = list(sys.stdin.readline().rstrip())
    stack = []
    flag = True
    for i in range(len(case)):
        if case[i] == '(':
            stack.append(case[i])
        elif case[i] == ')':
            if len(stack) == 0:
                flag = False
                break
            else:
                stack.pop()

    if len(stack) != 0:
        flag = False

    if flag:
        print('YES')
    else:
        print('NO')

💡 コンセプト