ねむーの日記~AtCoderな日々~

福岡に住むプログラミング好きのブログです!

AtCoder Beginner Contest 124 B - Great Ocean View

冷凍食品総選挙をテレビで見て明日の晩御飯に採用しようか悩んでいる、ねむーです。

今回はAtCoder(https://atcoder.jp/contests/abc124)にて開催されました、AtCoder Beginner Contest 124 B問題「B - Great Ocean View」の問題と僕との戦闘記です。

0.はじめに

今回も、プログラミング言語C#を使用しています。

1.問題文

東西に N 個の山が連なっており、西の果てには広大な海が広がっています。

各山頂には旅館があり、あなたは海を眺められる旅館を選ぶことにしました。

西から i 番目の山の高さは H i です。

西から 1 番目の山頂にある旅館からは必ず海を眺めることができます。

西から i ( i= 2 , 3 , . . . , N ) 番目の山頂にある旅館については、 H 1 ≤ H i , H 2 ≤ H i , . . . , かつ H i − 1 ≤ H i のとき、その旅館から海を眺めることができます。

これら N 個の旅館のうち、海を眺められる旅館はいくつあるでしょうか?

2.制約

  • 入力は全て整数である。
  • 1 ≤ N ≤ 20
  • 1 ≤ H i ≤ 100

3.入力例

  • 入力
5
4 5 3 5 4
  • 出力
3

4.初見の感想

  • H iがH 1~H iまでの中で最大値であれば海が見える
  • 毎回1~iまでの高さの最大値を計算してると計算量が大変
  • 最大値を保存する変数を作ることで、今までの最大値と現在の値を比較する一回の計算で済むようになる

5.コードの簡単な解説

  • まず、入力の値のパース、ループで更新する変数の準備
        int N = int.Parse(Console.ReadLine());
        string[] input = Console.ReadLine().Split(' ');
        int max = 0;
        int count = 0;
  • ループで最大値とカウントを更新
        for(int i = 0; i < N; i++)
        {
            int high = int.Parse(input[i]);
            if (max <= high) { max = high;
                count++;
            }
        }
  • 出力
        Console.WriteLine(count);

6.全コード

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 max = 0;
        int count = 0;
        for(int i = 0; i < N; i++)
        {
            int high = int.Parse(input[i]);
            if (max <= high) { max = high;
                count++;
            }
        }
        Console.WriteLine(count);
    }
}

7.最後に

このB問題は5分で解けたので成長を感じています!