見出し画像

AtCoder Beginner Contest 173を見直す B - Judge Status Summary

問題

改行区切で「AC, WA, TLE, RE」のいずれかが、N個与えられるのでそれぞれの数を出力する問題

作成した解答

python:148ms

N = int(input())
ans = {"AC": 0, "WA": 0, "TLE": 0, "RE": 0}
for _ in range(N):
   S = input()
   ans[S] += 1

for k, v in ans.items():
   print(k,'x',v)

Pythonの連想配列は、3.7以降であれば順番を記憶しているので、出力したい順番に初期化してやれば出力時はループ処理できる。また、「print()」は引数で与えられた値が複数の場合は半角で区切って出力する。

他の人の回答や解説動画をみてみたが、上記のように連想配列を使っている人が多い印象。

解説を見て作成した解答

C++:28ms

#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<string, int> ans;
   rep(i, N) {
       string s;
       cin >> s;
       ans[s]++;
   }
   for (string s: {"AC", "WA", "TLE", "RE"}) {
       cout << s << " x " << ans[s] << endl;
   }
}

C++の「map」は上記の指定方法だと、存在しないキーが指定された場合は値「0」で初期化を自動でやってくれるので、「map」の中身については事前に指定しなくてもいい、ただこの問題では、出力順が指定されているので出力箇所で出力したい順の文字列のベクターを利用している。

前回分


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