AtCoder ABC 065 B – Trained? Python解説

2021年11月21日

スポンサーリンク

Trained?

今回の問題は説明が難しいので、こちらからどうぞ「Trained?」。
入力例と出力例を見てみると。

#入力例
3 #ボタンの個数
3
1
2

#出力例
2

ボタン1が3になっているので、ボタン1の次にボタン3が光ります。
ボタン3は2になっているので、ここでボタンを押して終了です。ボタン2を光らせることができるので、
押すボタンの回数を出力します。

ボタン2を光らせることができない場合は-1を出力します。

ではコードを書いていきます。

n = int(input())

a = [int(input()) for _ in range(n)]
flag = False
cnt = 0

# *1
button = a[0]
for _ in range(n):
    if button == 2:
        cnt += 1
        flag = True
        break
    else:
        cnt += 1
        button = a[button - 1]
        
if flag:
    print(cnt)
else:
    print(-1)

(*1)では、まずボタン1を変数buttonに格納しています。続くfor文のループ回数はボタンの個数であるnにしました。次のif文ではボタンの中身が2であるか確認し、2だった場合、Trueにしてループをbreakしています。

ボタンが2でなかった場合は、次に光るボタンを格納して再度ループを回します。