본문 바로가기

OJ

[BOJ] 2108 통계학 (JAVA)

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

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
	
    public static void main(String[] args) throws Exception {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        int[] cnt = new int[8001];
        int maxCnt = 0;
        double avg = 0;
        for (int i = 0; i < N; i++) {
            int num = Integer.parseInt(br.readLine()) + 4000;
            if (maxCnt < ++cnt[num]) ++maxCnt;
            avg += num;
        }

        // 산술 평균
        avg = (avg / N) - 4000;

        // 중앙값
        int half = N / 2 + 1;
        int mid, j = 0;
        for (mid = 0; mid < 8001; mid++) {
            j += cnt[mid];
            if (half <= j) break;
        }

        // 최빈값
        boolean flag = false;
        int num = 0;
        for (int i = 0; i < 8001; i++) {
            if (cnt[i] == maxCnt) {
                num = i;
                if (flag) break;
                else flag = true;
            }
        }

        // 범위
        int head;
        for (head = 0; head < 8001; head++) {
            if (cnt[head] != 0) break;
        }
        int tail;
        for (tail = 8000; tail >= 0; tail--) {
            if (cnt[tail] != 0) break;
        }

        System.out.print(Math.round(avg) + "\n" + (mid - 4000) + "\n" + (num - 4000) + "\n" + (tail - head));

    }
	
}

'OJ' 카테고리의 다른 글

[BOJ] 1021 회전하는 큐 (JAVA)  (0) 2023.07.21
[BOJ] 1789 수들의 합 (JAVA)  (0) 2023.07.20
[BOJ] 15558 점프 게임 (JAVA)  (0) 2023.07.18
[BOJ] 26091 현대모비스 소프트웨어 아카데미 (JAVA)  (0) 2023.07.17
[BOJ] 9019 DSLR (JAVA)  (0) 2023.07.16