본문 바로가기

알고리즘/문제 풀이

💜 백준 2108 통계학 JAVA

1. 문제 설명

[문제 링크](https://www.acmicpc.net/problem/2108)

산술 평균, 중앙값, 최빈값, 범위를 구하면 된다.

2. 푸는 원리

산술 평균 -> 총합 / 머릿수

중앙값: 중앙에 있는 녀석 계산

최빈값: TreeMap을 사용 Key = 입력 받은 값, value = 해당 값이 나온 횟수, TreeMap은 순서가 보장됨으로, 입력을 한번 정렬한 후에 TreeMap에 넣으면 된다.

범위 : 최대값 - 최소값

3. 코드 분석

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.TreeMap;

/*
 * 2108번 통계학
 * */


public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        TreeMap<Integer, Integer> map = new TreeMap<>();
        StringBuilder sb = new StringBuilder();

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

        int [] arr = new int[N];

        for (int i = 0; i < N; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        Arrays.sort(arr);

        int acc = 0;
        for (int i = 0; i < N; i++) {
            acc +=arr[i];

            if(map.get(arr[i]) == null){
                map.put(arr[i], 1);
            }else{
                map.put(arr[i], map.get(arr[i])+1);
            }
        }

        // 평균
        sb.append(Math.round((float) acc /N)).append("\n");
        // 중앙값
        sb.append(arr[N/2]).append("\n");

        // 최빈값
        int mostButSecond = 0;
        int mostCnt = 0;
        boolean changeOnce = false;
        for (int temp : map.keySet()){
            if(mostCnt < map.get(temp)){

                // 모든 값 갱신
                mostButSecond = temp;
                mostCnt = map.get(temp);
                changeOnce = false;
            }

            else if(mostCnt == map.get(temp) && !changeOnce && mostButSecond < temp){
                mostButSecond = temp;
                changeOnce = true;
            }
        }

        sb.append(mostButSecond).append("\n");



        sb.append(arr[arr.length-1] - arr[0]);

        System.out.println(sb);
    }
}

'알고리즘 > 문제 풀이' 카테고리의 다른 글

[코드 트리] 배열 회전 2 Java  (0) 2024.06.14
💚 백준 1940 주몽  (0) 2024.05.06
💜 백준 10250 ACM 호텔  (0) 2024.04.23
💜 백준 11729번 하노이 탑 이동순서  (0) 2024.04.20
💜 백준 1874번 스택 수열  (0) 2024.04.20