結果

問題 No.3114 0→1
ユーザー kakur41
提出日時 2025-04-20 06:32:42
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 94 ms / 2,000 ms
コード長 2,248 bytes
コンパイル時間 222 ms
コンパイル使用メモリ 12,160 KB
実行使用メモリ 12,032 KB
最終ジャッジ日時 2025-04-20 06:32:45
合計ジャッジ時間 3,676 ms
ジャッジサーバーID
(参考情報)
judge4 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 30
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys

def solve():
    """
    問題を解くメイン関数
    """
    n = int(sys.stdin.readline())
    # 文字列をリストに変換して変更可能にする
    s = list(sys.stdin.readline().strip())
    changes = 0 # 操作回数をカウントする変数

    # 文字列を左から右へ走査
    for i in range(n):
        # インデックス i で終わる禁止パターン '010' をチェック
        # s[i] が '0' であり、かつ s[i-1] が '1', s[i-2] が '0' の場合
        if i >= 2 and s[i-2] == '0' and s[i-1] == '1' and s[i] == '0':
            s[i] = '1' # パターンの末尾の '0' を '1' に変更
            changes += 1 # 操作回数をインクリメント
            continue # このインデックスでの処理は完了

        # インデックス i で終わる禁止パターン '100' をチェック
        # s[i] が '0' であり、かつ s[i-1] が '0', s[i-2] が '1' の場合
        # 注意: s[i] は上の '010' チェックで '1' に変更されている可能性があるため、
        # ここでは elif ではなく if を使う(あるいは '010' チェックを優先する)
        # 上の continue により、'010' が見つかった場合はここは実行されない
        if i >= 2 and s[i-2] == '1' and s[i-1] == '0' and s[i] == '0':
            s[i] = '1' # パターンの末尾の '0' を '1' に変更
            changes += 1 # 操作回数をインクリメント
            continue # このインデックスでの処理は完了

        # インデックス i で終わる禁止パターン '00' をチェック
        # s[i] が '0' であり、かつ s[i-1] が '0' の場合
        # 注意: s[i] は上のチェックで '1' に変更されている可能性がある
        # 上の continue により、'010' または '100' が見つかった場合はここは実行されない
        if i >= 1 and s[i-1] == '0' and s[i] == '0':
            s[i] = '1' # パターンの末尾の '0' を '1' に変更
            changes += 1 # 操作回数をインクリメント
            continue # このインデックスでの処理は完了

    # 最終的な操作回数を出力
    print(changes)

# 関数を実行
solve()
0