問題概要
問題ページ
-
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()