Baekjoonアルゴリズム | 1157番問題: 単語の勉強

出典

https://www.acmicpc.net/problem/1157

問題

Baekjoon Online Judgeの1157番問題、単語の勉強を解きます。

入力

正確な入力形式と制約は元の問題文に従います。

出力

問題で求められる答えを出力します。

サンプル入力 1

Mississipi

サンプル出力 1

?

サンプル入力 2

zZa

サンプル出力 2

Z

サンプル入力 3

baaa

サンプル出力 3

A

アルゴリズム分類

  • 数学
  • 実装

解説

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {

    public static void main(String[] args) throws IOException {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
            String input = br.readLine();

            Map<Character, Integer> alphabetCountMap = new HashMap<>();

            Set<Character> maxSet = new HashSet<>();
            int max = Integer.MIN_VALUE;

            for (int i = 0; i < input.length(); i++) {
                Character alphabet = Character.toUpperCase(input.charAt(i));

                int count;
                if (alphabetCountMap.containsKey(alphabet)) {
                    count = alphabetCountMap.get(alphabet) + 1;
                } else {
                    count = 0;
                }
                alphabetCountMap.put(alphabet, count);

                if (max < count) {
                    max = count;
                    maxSet.clear();
                    maxSet.add(alphabet);
                } else if (max == count) {
                    maxSet.add(alphabet);
                }
            }

            if (maxSet.size() > 1) {
                System.out.println("?");
            } else {
                System.out.println(maxSet.iterator().next());
            }
        }
    }
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main2 {

    public static void main(String[] args) throws IOException {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
            String input = br.readLine();

            int[] alphabet = new int[26];
            for (int i = 0; i < input.length(); i++) {
                //char c = Character.toUpperCase(input.charAt(i));
                //alphabet[c - 65]++;
                char c = input.charAt(i);
                if (c >= 'a')
                    alphabet[c - 'a']++;
                else
                    alphabet[c - 'A']++;
            }

            char output = 0;
            int max = Integer.MIN_VALUE;
            for (int i = 0; i < alphabet.length; i++) {

                if(max < alphabet[i]) {
                    max = alphabet[i];
                    output = (char) (i + 'A');
                } else if(max == alphabet[i]) {
                    output = '?';
                }
            }

            System.out.println(output);
        }
    }
}