알파벳 대소문자로 된 단어가 주어지면, 이 단어에서 가장 많이 사용된 알파벳이 무엇인지 알아내는 프로그램을 작성하시오. 단, 대문자와 소문자를 구분하지 않는다.
첫째 줄에 알파벳 대소문자로 이루어진 단어가 주어진다. 주어지는 단어의 길이는 1,000,000을 넘지 않는다.
첫째 줄에 이 단어에서 가장 많이 사용된 알파벳을 대문자로 출력한다. 단, 가장 많이 사용된 알파벳이 여러 개 존재하는 경우에는 ?를 출력한다.
Mississipi
?
zZa
Z
z
Z
baaa
A
str
)을 대문자로 변환(String.toUpperCase()
)한다.val
)을 생성하고, 알파벳이 사용되었는지 판별하기 위한 문자열(alpa
)을 선언한 뒤 A
부터 Z
까지 초기화 한다.for
문을 실행하여 문자열 str
과 알파벳 사용 판별 문자열 alpa
을 구성하는 문자를 추출(String.charAt()
)하며 동일한 문자인지 비교한다. 동일하다면 사용 횟수(val
)를 증가시킨다.max
)와 알파벳의 위치를 저장할 변수(maxIdx
)를 선언하고 각각 배열 val
의 처음 값(val[0]
)과 인덱스(0
)로 초기화 한다.for
문을 실행하며 최대 사용횟수 max
와 현재위치의 알파벳의 사용 횟수(val[i]
)를 비교한다. 만약 val[i]
가 더 크다면 max
와 maxIdx
를 갱신한다.boolean
형 변수(bool
)를 선언하고 false
로 초기화 한 뒤, for
문을 실행하여 알파벳의 사용 횟수를 검사한다. 하나라도 중복 존재한다면 중복됨을 표시하고 루프를 빠져나온다.import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
scanner.close();
str = str.toUpperCase(); // 입력받은 문자열
int[] val = new int[26]; // 알파벳이 사용된 횟수 저장할 배열
String alpa = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // 알파벳 사용 판별 문자열
for(int i=0; i<str.length(); i++) { // 입력받은 문자열의 알파벳을
for(int j=0; j<alpa.length(); j++) { // 모든 알파벳과 비교(사용 여부 판별)
if(str.charAt(i) == alpa.charAt(j)) // 입력받은 문자열의 알파벳을 alpa에서 발견했다면
val[j]++; // 알파벳의 사용 횟수 증가
}
}
int maxIdx = 0; // 최대값(가장 많이 사용한 알파벳)이 저장되어 있는 인덱스
int max = val[0]; // 최대값을 'A'가 사용된 횟수로 초기화
for(int i=1; i<val.length; i++) { // 최대값으로 지정한 'A'를 제외한 모든 알파벳의 사용 횟수를 검사(B~Z)
if(val[i] > max) { // 최대값보다 현재 값(검사하려는 알파벳이 사용된 횟수)가 더 크다면
max = val[i]; // 최대값을 현재 값으로 갱신
maxIdx = i; // 최대값의 인덱스에 현재 값의 인덱스를 갱신
}
}
boolean bool = false; // 중복여부 저장할 변수
for(int i=0; i<val.length; i++) { // 모든 알파벳의 사용 횟수를 검사
if((i!=maxIdx) && (val[i]==max)) // 최대값의 인덱스가 아니고, 최대값과 현재값이 같다면(중복 존재하는 경우)
bool = true; // 중복 표시
break;
}
if(bool) // 중복된 경우
System.out.println("?");
else // 하나만 존재할 경우
System.out.println(alpa.charAt(maxIdx));
}
}