AtCoder ABC 132 B – Ordinary Number Python解説

スポンサーリンク

Ordinary Number

{1, 2, …, n} の順列 p = {p1​, p2​, …, pn} があります。
以下の条件を満たすような pi (1<i<n) がいくつあるかを出力してください。
pi−1​, pi​, pi+1​ の 3 つの数の中で、pi が 2 番目に小さい。

AtCoder Beginner Contest 「Ordinary Number」

pi−1​, pi​, pi+1​ の3つの数をスライスで用意。そして pi−1​, pi​, pi+1​ を比べて pi が2番目に小さかったらカウントアップをしていきます。

n = int(input())
p = list(map(int, input().split()))

cnt = 0

for i in range(n - 2):
    p1, p2, p3 = p[i: i+3]
    if p1 < p2 < p3 or p3 < p2 < p1:
        cnt += 1
        
print(cnt)

p1, p2, p3 = p[i: i+3]で配列から3つの数を取りました。その分for文の範囲はn – 2になるので注意してください。3つの数が用意できたので比べていきます。 pi が2番目に小さい場合として、p1 < p2 < p3 or p3 < p2 < p1が考えられます。条件に当てはまればカウントアップして、最後にcntを出力すれば完了です。

AtCoderB問題

Posted by cheese