[BOJ/백준] 1157번: 단어 공부

이번 글에서는 백준 알고리즘 사이트에서 1157번 단어 공부 문제 풀이 및 설명을 하도록 하겠습니다.

1157번: 단어 공부 문제

문제 내용

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

문제의 내용 굉장히 단순합니다. 주어진 문자에 대해서 대소문자 구분없이 카운팅만 해주면 됩니다.

문제풀이 요약

  1. 전체 문자열의 대문자 또는 소문자로 통일
  2. 알파벳 배열을 만들고, 입력된 문자열의 문자를 카운팅하여 알파벳 배열에 저장
  3. 배열에서 최댓값을 갖는 인덱스 찾기
  4. 배열에 최댓값을 갖는 것이 두 개인지 체크

위와 같은 형식으로 문제를 해결하실 수 있습니다.

정답 코드

import java.io.*;

public class B1157 {
    static String in;
    static int[] alphabet = new int[26];
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        in = br.readLine().toLowerCase();
        for (int i = 0; i < in.length(); i++) {
            alphabet[in.charAt(i) - 97]++;
        }
        int max = 0, count = 0, maxIdx = -1;
        for (int i = 0; i < alphabet.length; i++) {
            if (max < alphabet[i]) {
                max = alphabet[i];
                maxIdx = i;
            }
        }
        for (int i = 0; i < alphabet.length; i++) {
            count += (max == alphabet[i]) ? 1 : 0;
            if (count == 2) break;
        }
        bw.write((count < 2) ? (char)(maxIdx + 65) + "\n" : "?\n");
        bw.flush();bw.close();
    }
}

맺음

간단하게 1157번: 단어 공부 문제 풀이를 해보았습니다. 혹시 궁금하신 점이나 이상한 점이 있으시면 댓글 부탁드리겠습니다.

감사합니다.

Buy me a coffee
글이 도움이 되셨다면, 커피 한 잔만 사주세요!
Comments
Copied to clipboard