알고리즘/백준

[백준] 1157번 단어 공부 - Java

Chung-A 2021. 3. 3. 18:31

 

문제 출처

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

 

1157번: 단어 공부

알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.

www.acmicpc.net


 주의할 점

무조건 대문자로 출력해야 하기 때문에 아스키코드를 통해 문제를 해결하도록 하자

? 출력되는 경우의 수를 조심해주자


 소스코드

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;

public class Main {

    public static void main(String[] args) throws IOException {
        //input
        Scanner scanner = new Scanner(System.in);
        HashMap<Character, Integer> map = new HashMap<>();
        String word = scanner.next();

        for (int i = 0; i < word.length(); i++) {
            int index = word.charAt(i);
            if (index > 91) {
                index -= 32;
            }

            char character = (char) index;
            if (!map.containsKey(character)) {
                map.put(character, 1);
            }
            else{
                map.replace(character, map.get(character) + 1);
            }
        }

        char targetKey=' ';
        int max = 0;
        List<Integer> collect = map.values().stream().sorted((c1, c2) -> c2 - c1).collect(Collectors.toList());
        if (collect.size() > 1 && collect.get(0).equals(collect.get(1))) {
            System.out.println("?");
            return;
        }

        for (Character character : map.keySet()) {
            if (map.get(character) > max) {
                targetKey = character;
                max = map.get(character);
            }
        }
        System.out.println(targetKey);
    }
}