ALGORITHM

[JAVA] 백준 1157번- 단어 공부

연듀 2022. 7. 22. 09:53

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

 

1157번: 단어 공부

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

www.acmicpc.net

 

 

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

public class Main{
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int[] arr = new int[26]; // 알파벳 배열 
        String s=br.readLine().toUpperCase(); // 대문자로 치환

        for(char x : s.toCharArray()){
                arr[x-'A']++; // 해당 인덱스 값 1 증가
        }
        int max=0;
        char answer='?';

        for(int i=0; i<arr.length; i++){
            if(arr[i] > max) {
                max =arr[i];
                answer=(char)(i+'A'); // 알파벳으로 변환
            }
            else if(arr[i]==max) answer='?'; // 최댓값과 같은 알파벳이 있다면
        }
        System.out.println(answer);
    }
}

 

제일 먼저 해시맵을 사용해 풀었었는데, 이 방법이 더 간단한것 같다.

26자리의 알파벳 배열을 만들고, 문제에 대문자와 소문자 구분이 없기 때문에 입력받은 문자열을 모두 대문자로 치환한다. 

대문자의 범위는 65~90이다. 알파벳에서 A(65)를 빼주면 해당 알파벳의 인덱스를 구할 수 있다.

알파벳 배열에 입력받은 문자열의 알파벳의 빈도수를 원소로 넣어준다.

 

배열을 돌면서 max의 값을 갱신해 최댓값을 구한다.

이 때 max의 값과 같은 배열의 원소가 있다면 최대 개수의 문자가 2개 이상이라는 뜻이므로 answer를 "?"로 해준다.