Baekjoon 9012.py[かっこ]


もし問題があったら?

最初のコメント(エラー)

t = int(input())
arr = [list(input()) for _ in range(t)]
result = [0] * t
for i in range(t):
    leftParenthesis, rightParenthesis = 0, 0
    while arr[i]:
        word = arr[i].pop()
        if word == '(':
            leftParenthesis += 1
        else:
            rightParenthesis += 1

    if leftParenthesis == rightParenthesis:
        result[i] = 'YES'
    else:
        result[i] = 'NO'

print(result)

第二の解釈

from collections import deque

t = int(input())
arr = [deque(input()) for _ in range(t)]
for i in range(t):
    result = []
    for j in range(len(arr[i])):
        word = arr[i].popleft()
        if word == '(':
            result.append('(')
        else:
            if len(result) == 0 or (j == 0 and word == ')'):
                result.append(True)
                break
            result.pop()
    if len(result) == 0:
        print('YES')
    else:
        print('NO')

ふくガス


「問題の条件が確認されていないので、最初の方法で解決しました.」("和")の個数をYESと表記し,)(の反例を確認し,スタック方式で変換した.
「(」が表示されると、結果リストに「」()が追加され、「」が表示されるとpop()が追加されます.if len(result) == 0 or (j == 0 and word == ')'):の場合、空のリストからポップアップされます().これは不可能なので、例外処理を行い、すぐに中断して重複文から逃れます.

もう一つの謎を見て


結果リストappend()とpop(),+-1をしないともっときれいな答えが出ます.