응애개발자
article thumbnail
728x90

문제

https://www.acmicpc.net/problem/2108

 

접근 방법

1. 산술평균, 중앙값, 최빈값(같으면 2번째  작은값), 범위를 구하면 되는 문제이다.

2. 카운팅 정렬을 만들고 풀어줍니다.

3. 최빈값은 flag를 만들어 만약 뒤에 나온 값이 앞에 나온 최빈값이랑 같으면 변경해주고, flag를 다시 false로 바꾸면서 풀었습니다.

 

코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    private static StringBuilder sb;
    private static BufferedReader br;
    private static StringTokenizer st;
    private static int N;
    private static int[] arr = new int[8010];
    private static double sum; //산술평균 
    private static int mid; //중앙값
    private static int count; // 최빈값
    private static int max = Integer.MIN_VALUE; //범위
    private static int min = Integer.MAX_VALUE; //범위

    //입력
    public static void input() throws Exception {
        br = new BufferedReader(new InputStreamReader(System.in));
        sb = new StringBuilder();

        N = Integer.parseInt(br.readLine());

        for(int i = 0 ; i < N ; i++){
            int input = Integer.parseInt(br.readLine());

            arr[input+4000]++;
            sum += input;

            if(input > max){
                max = input;
            }

            if(input < min){
                min = input;
            }
        }
    }

    //실행
    public static void process() {
        int midCount = 0 ;
        int recentCnt = 0;
        boolean flag = false;

        for(int i = min+4000 ; i <= max+4000 ; i++){
            if(arr[i] > 0){
                //중앙값
                if(midCount < (N+1)/2){
                    midCount += arr[i];
                    mid = i-4000;
                }

                //최빈값
                if(recentCnt < arr[i]){
                    recentCnt = arr[i];
                    count = i-4000;
                    flag = true;
                }else if(flag == true && recentCnt == arr[i]){
                    count = i-4000;
                    flag = false;
                }
            }
        }

        System.out.println(Math.round(sum/N));
        System.out.println(mid);
        System.out.println(count);
        System.out.println(max-min);
    }


    public static void main(String[] args) throws Exception {
        input();
        process();
    }
}
profile

응애개발자

@Eungae-D

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!