[Java] #백준 1157 단어공부

Kitsun3·2025년 1월 27일


📌 고려사항

기본적으로 백준 문제를 풀 때 간결화 된 코드보다 가독성 좋은 코드를 1순위로 생각하고 작성한다.

HashMap 을 사용해 실제 포함된 알파벳만 추려서 구하는게 가독성 측면에서 좋을 것 같았다.
(사실 그것보다 아직까지는 시간까지 고려할 수준이 안된다...)


작성코드

import java.io.*;
import java.util.*;

public class Main {

    public static void solution() throws IOException {
        try (BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
            String word = br.readLine().toUpperCase();
            Map<Character, Integer> count = new HashMap<>();

            for (char c : word.toCharArray()) {
                count.put(c, count.getOrDefault(c, 0) + 1);
            }

            int maxCount = 0;
            char res = '?';

            for (Map.Entry<Character, Integer> entry : count.entrySet()) {
                if (entry.getValue() > maxCount) {
                    res = entry.getKey();
                    maxCount = entry.getValue();
                } else if (entry.getValue() == maxCount) {
                    res = '?';
                }
            }
            System.out.println(res);
        }
    }

    public static void main(String[] args) throws IOException {
        solution();
    }
}

먼저 결과값이 대문자로 반환되어야 하므로 toUpperCase 로 대문자 변환을 진행했다.

getOrDefault 를 사용해 HashMap 에 key의 존재 여부에 따라 value에 변화를 주도록 했다.

각 key, value의 쌍인 Entry 를 가져와 순회 후 가장 높은 빈도의 key를 구한다.


개선방향

대부분의 사람들은 ASCII 코드를 사용해서 사이클을 돌려 알파벳 빈도를 구하는 방식을 사용했는데 이유를 알아보니 처리 시간과 메모리 사용량에서 장점을 보인다.

난 ASCII 코드를 사용할 생각 조차 못했는데 이 부분은 그냥 문제를 많이 풀어봐야 알 것 같다.

profile
HELLO

0개의 댓글