[Java] 단어 공부

정석·2024년 1월 29일

알고리즘 학습

목록 보기
8/67
post-thumbnail

문제

풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

        int[] arr = new int[26];
        String s = bf.readLine();

        for(int i = 0; i < s.length(); i ++ ) {
            if ('a' <= s.charAt(i) && s.charAt(i) <= 'z') { // 소문자일 경우
                arr[s.charAt(i) - 97]++;
            } else { // 대문자일 경우
                arr[s.charAt(i) - 65]++;
            }
        }
        int max = -1;
        char ch = '?';
        for(int i = 0; i < 26; i++){

            if(arr[i] > max) { // 제일 많이 카운트된 알파벳 구하기
                max = arr[i];
                ch = (char)(i + 65);
            }
            else if (arr[i] == max) {
                ch = '?';
            }

        }
        System.out.println(ch);
    }
}

사용자로부터 입력받은 영어단어 중 각 알파벳의 사용 빈도수를 측정해서 제일 빈도가 높은 알파벳을 찾는 알고리즘이다. 소문자나 대문자는 상관 없으며, 최대 빈도수가 없는 경우엔 '?' 를 출력하도록 한다.

a~z 까지의 카운트를 할 배열을 만들어준다.

입력받은 단어를 한 글자씩 사용 빈도를 카운트 해야함으로 BufferedReader 로 입력 받은 readLine 을 문자열에 저장한 후 소문자일 경우 -97을 하여 알파벳의 해당 배열에 +1 을 진행한다.

대문자일 경우 -65하여 똑같이 진행한다.

이 후 반복문을 통해 max 값을 찾고 해당 배열의 알파벳을 ch 에 담아 출력한다.

알게된 점

  • 문자열에 charAt(i)을 사용하면 각 문자로 출력됨을 알게 되었다.
  • char 형은 아스키 코드로 계산될 수 있음을 알게 되었다.

0개의 댓글