AtCoder Beginner Contest 132 B - Ordinary Number
毎日雨でズボンが濡れてしんどいです、ねむーです。
今回はAtCoder(https://atcoder.jp/contests/abc132/tasks/abc132_b)にて開催されました、AtCoder Beginner Contest 132 B問題「B - Ordinary Number」の問題と僕との戦闘記です。
0.はじめに
1.問題文
{ 1 , 2 , . . . , n } の順列 p = { p 1 , p 2 , . . . , p n } があります。
以下の条件を満たすような p i ( 1 < i < n ) がいくつあるかを出力してください。
- p i − 1 , p i , p i + 1 の 3 つの数の中で、 p i が 2 番目に小さい。
2.制約
- 入力は全て整数である。
- 3 ≤ n ≤ 20
- p は { 1 , 2 , . . . , n } の順列である。
3.入力例
- 入力
9 9 6 3 2 5 8 7 4 1
- 出力
5
4.初見の感想
- 真ん中の数字が2番目に小さいとはどういうことか?
→3つの数の中で、[最大、真ん中、最小]or[最小、真ん中、最大]というパターンの2通り。
- 「最大>真ん中&&真ん中>最小」という条件式で判定できる
5.コードと簡単な解説
using System; using System.Collections.Generic; using System.Linq; class Program { static void Main(string[] args) { //入力 int N = int.Parse(Console.ReadLine()); string[] input = Console.ReadLine().Split(); int[] list = new int[N]; for(int i = 0; i < N; i++) { list[i] = int.Parse(input[i]); } //条件判定 int ans = 0; for(int i = 0; i < N-2; i++) { if (list[i] > list[i + 1] && list[i + 1] > list[i + 2]) { ans++; } else if(list[i] < list[i + 1] && list[i + 1] < list[i + 2]) { ans++; } } Console.WriteLine(ans); } }
6.最後に
簡単な問題なので、コードを簡潔に書けるよう工夫したいところです。