OJ
[BOJ] 2108 통계학 (JAVA)
P3PP4
2023. 7. 19. 10:00
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));
}
}