Blog

B1157 단어 공부

날짜 2024-03-28
사용 언어 Java
문제 유형 구현, 문자열
문제 URL https://www.acmicpc.net/problem/1157
시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
2 초 128 MB 284114 113312 89450 39.685%

문제 #

문제 설명 #

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

제한사항 #
  • 첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다.

  • 주어지는 단어의 길이는 1,000,000을 넘지 않는다.

  • 첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다.

  • 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.


나의 풀이 #

import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.util.HashMap;  
import java.util.Map;  
  
  
public class Main {  
    public static void main(String[] args) throws Exception {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));  
  
        // 모두 대문자로 변경 (대소문자 구분x 조건 / 대문자 출력 조건)  
        String str = br.readLine().toUpperCase();  
        br.close();  
  
        // 알파벳별 횟수 저장  
        HashMap<Character, Integer> hashMap = new HashMap<>();  
        for (int i = 0; i<str.length(); i++) {  
            hashMap.put(str.charAt(i), hashMap.getOrDefault(str.charAt(i), 0) + 1);  
        }  
  
        int max = 0;  
        char maxAlph = '?';  
        // 가장 많이 나온 알파벳 찾기  
        for (Map.Entry<Character, Integer> map : hashMap.entrySet()) {  
            if (max < map.getValue()) {  
                max = map.getValue();  
                maxAlph = map.getKey();  
            }  
        }  
  
        // 가장 많이 나온 알파벳이 여러개인지 확인  
        int count = 0;  
        for (int mapValue : hashMap.values()) {  
            if (max == mapValue) {  
                count++;  
            }  
        }  
  
        maxAlph = count > 1 ? '?' : maxAlph;  
        bw.write(String.valueOf(maxAlph));  
        bw.close();  
    }  
}

실행결과

다른 사람의 풀이 #



관련개념 학습 #