


처음에 생각했던 로직은 알파벳 A부터 Z까지 들어있는 char 배열을 만든 후 입력받은 문자열 str과 하나하나 비교하여 같으면 같은 인덱스의 int 배열에 ++을 하려고 했다.
하지만 이 방법이 복잡한 것 같아 이중 for문을 이용해 ch[i]와 ch[j]가 같으면 count++을 하고 int 배열 count 값이 가장 큰 알파벳을 반환하려고 했다. 그러나..
가 뜬 관계로 이중 for문을 사용하지 못했다. 주어지는 단어의 길이 제한이 1,000,000이므로 이중 for문을 돌리면 시간 제한 2초를 초과한다는 것이다.
그래서 처음 생각했던 로직으로 다시 돌아왔다😅
입력받은 문자열을 알파벳 단위로 넣은 char 배열 ch과 대문자 알파벳 A부터 Z까지 들어있는 char 배열 alpa과 비교하여 같을 경우 alpa와 같은 크기의 int 배열 alpaCount의 같은 인덱스에 ++를 해준다.
alpaCount에서 가장 큰 값의 인덱스를 구하는 for문에서 max와 같은 값이 있으면 boolean형 same 변수를 true로 바꿔준다. (처음 선언할땐 false로 선언해줘야함!) 마지막 if문에서 same이 true면 ? 출력, 아니라면 가장 많이 나온 알파벳 출력!
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bfw = new BufferedWriter(new OutputStreamWriter(System.out));
String str = bfr.readLine().toUpperCase();
char ch[] = new char[str.length()];
char alpa[] = new char[26];
char aschi = 65;
int count[] = new int[str.length()];
int alpaCount[] = new int[26];
int max = 0;
int maxIn = 0;
boolean same = false;
for (int i = 0; i < ch.length; i++) {
ch[i] = str.charAt(i);
}
for(int i = 0; i < alpa.length; i++) {
alpa[i] = aschi;
aschi++;
}
for (int i = 0; i < ch.length; i++) {
for (int j = 0; j < alpa.length; j++) {
if (ch[i] == alpa[j]) {
alpaCount[j]++;
break;
}
}
}
for (int i = 0; i < alpaCount.length; i++) {
if (max < alpaCount[i]) {
max = alpaCount[i];
maxIn = i;
same = false;
}
else if (max == alpaCount[i]) {
same = true;
}
}
if (same) {
bfw.write("?");
} else {
bfw.write(alpa[maxIn]);
}
bfr.close();
bfw.flush();
bfw.close();
}
}