【ABC179 B】「Go to Jail」を解く【Python3】

「AtCoder」解説一覧へ

「サイコロを2回振る」という行動をしたN回の出目から、ゾロ目が3回以上続けて出たかどうかを判定する問題です。

提出
n = int(input())
d = [list(map(int, input().split())) for _ in range(n)]
cnt = 0
ans = 0

for i in range(n):
    d1, d2 = d[i]
    if d1 == d2:
        cnt += 1
        ans = max(ans, cnt)
    else:
        cnt = 0

if ans >= 3:
    print("Yes")
else:
    print("No")

出目dは、リストにします。

複数行のデータをリストにする際には、内包表記を用いると便利です。

入力例1の場合、dの中身は以下のようになります。

d = [[1, 2], [6, 6], [4, 4], [3, 3], [3, 2]]

このリストを一つ目の[1,2](入力例1の場合)から順に取り出し、d1,d2に代入して、d1,d2が等しいかどうかを判定します。

同じであれば「cnt」に1を加え、「ans」と比較して大きい方を「ans」に代入します。

それ以外では「cnt」を0に戻します。

最終的に「ans」に入っている数値が、3以上かそうでないかを判定し、「Yes」「No」を出力します。

split()メソッド

split()メソッドは、区切り文字を指定して、文字列を分割します。

区切り文字を指定しない場合、空白、タブ、改行で分割されます。

str.split("区切り文字")

map()関数

map()関数は、イテラブル(リストやタプルなど)の各要素に関数の処理を適用します。

map(関数、イテラブル)

【ABC179】解説記事リスト

「AtCoder」解説一覧に戻る

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です