見出し画像

APG4b EX23を解いた

APG4b(AtCoder Programming Guide for beginners )はAtCoderが提供する、C++の入門教材です。今日はその中で「辞書」を用いて回答するEX23に挑戦しました。EX23はABC(AtCoder Beginner Contest)でいうとB問題ぐらいの難易度だと思います。

EX23 - 最頻値

N要素の数列が与えられるので、最頻値とその回数を出力する問題

作成した解答

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;

int main() {
   int n;
   cin >> n;
   map<int, int> am;
   int max_num = 0;
   am[max_num];
   rep(i, n){
       int a;
       cin >> a;
       am[a]++;
       if(am.at(max_num) < am.at(a)) max_num = a;
   }
   cout << max_num << " " << am.at(max_num) << endl;
}

解説

シンプルに出てきた数を比較しているだけですが、配列へのアクセス同様APG4bでは「[]」よりも「.at()」がお勧めされているのでそれに従ってみました。2ヶ所「[]」でのアクセスが出てきていますが、これは「.at()」は値の初期化ができない(存在しないキーにアクセスしようとするとエラーになる)ためです。ちなみに「[]」で存在しないキーにアクセスした場合は、型の初期値で初期化されます。​

この記事が気に入ったらサポートをしてみませんか?