알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
Mississipi
?
zZa
A
z
Z
baaa
A
HashSet
을 이용해 중복을 제거한 뒤, 이 HashSet
요소를 반복문으로 꺼내며 원래 문자열 문자 하나하나를 비교하며 카운트를 증가시키려고 했다.HashSet
은 순서가 없고, 각 문자열의 빈도수를 또 따로 저장해야하는 점이 매우 번거로웠다.65
부터 대문자의 경우 97
로 바꿀 수 있기 때문에, 이 값을 정수 배열의 인덱스로 이용한다.B
의 경우에는 값이 98
이므로 98-97
이므로 arr[1]
의 값이 1
증가하게 된다.65
를 더한 값이 알파벳 대문자가 되므로 이를 출력하면 문제가 해결된다.import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[26];
String input = br.readLine();
for (int i = 0; i < input.length(); i++) {
// 대문자 이면
if (input.charAt(i) >= 65 && input.charAt(i) <= 90) {
arr[input.charAt(i) - 'A']++;
} else {
//소문자이면
arr[input.charAt(i) - 'a']++;
}
}
int max = -1;
char ch = '?';
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
ch = (char) (i + 'A');
} else if (arr[i] == max) {
ch = '?';
}
}
System.out.println(ch);
}
}