boj 1157

ttomy·2022년 7월 24일
0

boj 1157

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형으로 캐스팅만 해도 변환이 가능했다.

0개의 댓글