https://www.acmicpc.net/problem/1157
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class boj1159 {
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
String input=br.readLine().toUpperCase();
char[] str=input.toCharArray();
//알파벳 별로 cnt저장
int[] cnt=new int[27];
int max_idx=(int)str[0]-65;
for(int i=0;i<str.length;i++) {
int idx = (int) str[i] - 65;
cnt[idx]++;
if (cnt[max_idx] < cnt[idx]) {
max_idx = idx;
}
}
Arrays.sort(cnt);
if(cnt[cnt.length-1]==cnt[cnt.length-2]){
System.out.println("?");
}else{
System.out.println( (char)(max_idx+65) );
}
}
}
정렬에 대해 익숙치 않아 생각보다는 오래 걸린 문제였다.
int[] 배열의 최댓값을 찾는 방법은 위처럼 for문을 이용하는 방법, Arrays의 sort를 이용하는 방법 , stream을 이용하는 방법이 있다.
그런데 최댓값이 여러 개일 경우는 어떻게 처리할까 하다가 저렇게 sort의 뒤의 두 배열값이 같은 크기면 최댓값이 여러개로 처리했다.
최대값이 여러개인지 검사하는 방법은 sort를 이용하는 방법외에도 for문을 한번더 돌아서 max값와 같은값을 가지는 idx의 개수를 세는 방법도 있겠다.
또한 java에서 아스키코드를 처리하는 방법에 대해 숙지했다. 관련 함수가 따로 있나 했지만 char,int형으로 캐스팅만 해도 변환이 가능했다.