AtCoder Beginner Contest

【pythonでABC179を解説】B - Go to Jail

問題概要

問題ページ

問題文

高橋君は、「サイコロを \(2\) 個振る」という行動を \(N\) 回行いました。
\(i\) 回目の出目は \(D_{i,1},D_{i,2}\) です。

ゾロ目が \(3\) 回以上続けて出たことがあるかどうか判定してください。
より正確には、\(D_{i,1}=D_{i,2}\) かつ \(D_{i+1,1}=D_{i+1,2}\) かつ \(D_{i+2,1}=D_{i+2,2}\) を満たすような \(i\) が少なくとも一つ存在するかどうか判定してください。

制約

  • \(3 \leq N \leq 100\)
  • \(1\leq D_{i,j} \leq 6\)
  • 入力は全て整数

問題の考察

問題をそのまま実装できれば解答できる問題。

処理手順

  • カウンターを用意(cnt
  • 各\(D_{i,1}=D_{i,2}\)について順番に処理
  • \(D_{i,1}=D_{i,2}\)の時カウンターを\(1\)増やす
  • \(D_{i,1} \ne D_{i,2}\)の時カウンターを\(0\)にする
  • カウンターが\(3\)以上の場合にはYesを出力して終了
  • 全ての\(D_{i,1}=D_{i,2}\)処理しても条件に該当しない場合にはNoを出力する

特に難し点はないが、Yesを出力後のexit()を記述し忘れないように気をつけましょう。

たびすけ
難しい問題ではないですが、for文・if文がバランスよく散りばめられているので正確に解答できるようしましょう!

ACコード

import sys


def solve():
    input = sys.stdin.readline
    mod = 10 ** 9 + 7
    n = int(input().rstrip('\n'))
    cnt = 0
    for i in range(n):
        d1, d2 = list(map(int, input().rstrip('\n').split()))
        if d1 == d2:
            cnt += 1
        else:
            cnt = 0
        if cnt >= 3:
            print("Yes")
            exit()
    print("No")


if __name__ == '__main__':
    solve()

-AtCoder Beginner Contest
-