020-004-001

Map応用:単語の出現頻度カウント

上級

問題説明

この問題では: 単語のリストを入力として受け取り、HashMap.merge()で各単語の出現頻度をカウントし、頻度の降順(同数の場合はアルファベット順)でソートして結果を標準出力に表示するプログラムを作成します。

頻度カウントパターン

HashMap.getOrDefault()とmerge()を使った効率的なカウント方法を学びます。

カウント方法

Map<String, Integer> freq = new HashMap<>();
for (String word : words) {
    freq.merge(word, 1, Integer::sum);
}

ソート方法

List<Map.Entry<String, Integer>> entries = new ArrayList<>(freq.entrySet());
entries.sort((a, b) -> {
    int cmp = b.getValue().compareTo(a.getValue()); // 降順
    return cmp != 0 ? cmp : a.getKey().compareTo(b.getKey()); // 同数ならアルファベット順
});

学習ポイント

  • merge()はキーが存在しなければ初期値、存在すれば関数を適用
  • Comparatorチェーンで複合ソート条件を実現
  • entrySet()でキーと値のペアを同時に取得

テストケース例

※ 出力例はプログラミングの国際標準に準拠し英語で表示しています

入力:
7
apple banana apple orange banana apple grape
期待される出力:
apple: 3
banana: 2
grape: 1
orange: 1
入力:
5
cat cat cat cat cat
期待される出力:
cat: 5
入力:
6
dog cat bird dog cat bird
期待される出力:
bird: 2
cat: 2
dog: 2
入力:
1
hello
期待される出力:
hello: 1
❌ テストに失敗したケースがあります
❌ エラー発生

あなたの解答

現在のモード: 自分のコード
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// ここにコードを書いてください

sc.close();
}
}
0 B / 5 MB

残り 9 回実行可能