알파벳 대소문자로 된 단어가 주어지면, 그 단어에서 가장 많이 사용된 알파벳을 출력하는 문제이다
단, 대문자와 소문자를 구분하지 않음
💡 가장 큰 영향을 미치는 항만 고려하므로 O(N) 이다
import java.io.*;
public class No_1157 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 1. 알파벳 빈도 저장 배열
int[] alphaCount = new int[26];
// 2. 입력 문자열을 모두 대문자로 변환
String S = br.readLine().toUpperCase();
// 3. 문자열 길이만큼 순회
for(int i = 0; i < S.length(); i++) {
alphaCount[S.charAt(i) - 'A']++;
}
int max = 0;
char mostChar = 'A';
// 4. 알파뱃 빈도 배열 크기 만큼 순회
for(int i = 0; i < 26; i++) {
if (alphaCount[i] > max) {
// 새로운 최대값을 max에 갱신
max = alphaCount[i];
mostChar = (char) ('A' + i);
} else if (alphaCount[i] == max) {
mostChar = '?';
}
}
System.out.print(mostChar);
}
}
이 문제를 풀 수 있는 핵심은 알파벳 개수 26개 만큼의 배열을 만들고 그 배열에게 빈도수를 계산한 뒤 최빈값이 유일한 지 아니면 같은지 확인하는게 핵심이다