본문 바로가기
코딩테스트 준비/백준

[백준] 1371번 - 가장 많은 글자 [Java]

by mwzz6 2025. 1. 6.

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

 

[백준] 1371번 - 가장 많은 글자 [Java]
[백준] 1371번 - 가장 많은 글자 [Java]
[백준] 1371번 - 가장 많은 글자 [Java]


1.  아이디어

 

알파벳의 개수를 세는 카운팅 배열을 활용하면 해결할 수 있다.


2. 문제풀이

 

입력값을 처리하는게 까다로웠는데 무한 루프로 한줄씩 입력받아서 null 체크로 EOF를 확인했고, 입력 받은 문장을 StringTokenizer로 파싱해서 공백을 제거하고 StringBuilder로 합치는 방식으로 포맷팅을 했다. 이후 알파벳으로만 이루어진 문자열을 순회하며 알파벳을 카운팅해주고 최대 등장 횟수를 구한 뒤 다시 순회하며 최대 등장 횟수와 일치하는 알파벳을 다시 StringBuilder로 합쳐서 출력하는 방식으로 구현했다.


3. 코드

 

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        String input;
        while ((input = br.readLine()) != null) {
            st = new StringTokenizer(input);
            while (st.hasMoreTokens()) {
                sb.append(st.nextToken());
            }
        }

        input = sb.toString();
        int[] cntArr = new int[26];
        for (int i = 0; i < input.length(); i++) {
            cntArr[input.charAt(i) - 'a']++;
        }

        int max = 0;
        for (int cnt : cntArr) {
            max = Math.max(max, cnt);
        }

        sb = new StringBuilder();
        for (int i = 0; i < cntArr.length; i++) {
            if (cntArr[i] == max) {
                sb.append((char) (i + 'a'));
            }
        }

        bw.write(sb.toString());
        bw.flush();
    }
}

4. 후기