白駿8958号


質問リンク:白準8958号(OX試験)

イニシャルコード

import sys

n = int(input())
l = list(sys.stdin.readline().rstrip() for _ in range(n))

for i in l:
    sum = 0
    score = 0
    
    for j in i:
        if j == 'O':
            sum += 1
            score += sum
        else:
            sum = 0
            
    print(score)
まず、テスト例の個数を入力し、対応する個数を文に変換し、値をlist保存に変換します.
Sysはinput()ではありません.stdin.readline()を使用してrstrip()を貼り付け、入力した最後に開行文字「n」を削除します.
その後、二重for文でリストの各要素を「O」と比較し、数を数えて加点し、求めて出力します.

に質問


テストケースのようにfor文を回してリスト形式で文字列を入力し、再びfor文を回して結果を出力する必要はないと思います.文の使用を減らす必要があるからです.

コードの変更

import sys

n = int(input())
for _ in range(n):
    result = sys.stdin.readline().rstrip()
    sum = 0
    score = 0
    
    for i in result:
        if i == 'O':
            sum += 1
            score += sum
        else:
            sum = 0
            
    print(score)
同様に、まずテスト例の個数を入力しましたが、以前とは異なり、文字列を1つずつ入力することでfor文とリストの使用を排除しました.
また,二重for文で文字を「O」と比較し,数を数えて加算出力する.