본문 바로가기
알고리즘/백준

백준 2108 통계학 자바

by reumiii 2020. 2. 12.

최빈값이 좀 어려웠다..

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		int[] freq = new int[8001];// 빈도수 (0~8000)
		int[] num = new int[n];// 입력받은 값이 오름차순대로 들어간 배열
		int sum = 0;// 합계
		int index = 0;
		int maxFre[] = new int[2];// 최빈값
		Arrays.fill(maxFre, 0);// 최빈값 0으로 초기화

		for (int i = 0; i < n; i++) {
			int inputNum = sc.nextInt();
			sum += inputNum;
			freq[inputNum + 4000]++;
		}

		for (int j = 0; j <= 8000; j++) {
			if (freq[j] > 0) {
				for (int k = 0; k < freq[j]; k++) {
					num[index] = j - 4000;// 오름차순으로 입력받은 값들을 넣어줌
					index++;
				}

				if (freq[maxFre[0]] < freq[j]) {// 최빈값이 나오면
					maxFre[0] = j; // 첫번째로 작은값에 최빈값 넣기
					maxFre[1] = maxFre[0]; // 두번째로 작은값에도 일단 같은값 넣기
				} else if (freq[maxFre[0]] == freq[j] && maxFre[1] == maxFre[0]) { // 여러 최빈값이 나올시에는
					maxFre[1] = j;// 두번째로 작은값만 셋팅
				}
			}
		}

		System.out.println((int) Math.round((double) sum / n));// 산술평균
		System.out.println(num[n / 2]);// 중앙값
		System.out.println(maxFre[1] - 4000);// 최빈값
		System.out.println(num[n - 1] - num[0]);// 범위(최대값 - 최소값)
	}
}

댓글