문자열을 입력받고, 그 문자열에서 가장 많이 나온 단어를 출력하며, 만약 두 알파벳이 나온 숫자가 같다면 ?를 출력하는 문제이다.
char 자료형에 익숙하다면 무난하게 풀 수 있을것이다.
기본적으론 가장 많이 나온 문자 둘을 비교하고,
여기에 추가적으로 그중 큰 숫자를 저장할 변수를 하나 더 만들면 해결된다.
평소에 char 자료형에 익숙하다면 기본적으로 생각할 수 있는 알고리즘이다.
toUpperCase()
여기에 추가로 해당 메소드를 사용하면 한층 더 간결해진다.
해당 메소드의 기능은
문자열의 모든 소문자 알파벳을 대문자로 변환해준다.
String s = "Hello World 1234 !@#$"
String upper = s.toUpperCase();
System.out.println(upper);
// HELLO WORLD 1234 !@#$ 출력
▲숫자와 공백 및 특수문자는 이에 영향받지 않는다.
따라서, 위 정보를 바탕으로 설계한 코드는 아래와 같다.
import java.util.*;
import java.io.*;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] arr = new int[26]; // 알파벳 26개
String s = br.readLine().toUpperCase();
for(int i=0; i<s.length(); i++){
char ch = s.charAt(i);
if(ch >= 'A' && ch <= 'Z'){
arr[ch - 'A']++;
}
}
int max = -1; // 맨 처음 동작은 실행될 수 있도록
char result = '?';
for(int i=0; i<26; i++){
if(arr[i] > max){
max = arr[i]; // 현재까지의 가장 큰 값 저장
result = (char)('A' + i);
}
else if(arr[i] == max){
result = '?';
}
}
System.out.println(result);
br.close();
}
}
맞았습니다!!