package solve1;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Main11 {
//2108 정렬4 Main11
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); //입력
int size;
do {
size = Integer.parseInt(br.readLine());
} while (size % 2 == 0); // N개의 수는 홀수여야 함
ArrayList<Integer> list = new ArrayList<>(); // Integer 리스트
for (int i = 0; i < size; i++)
list.add(Integer.parseInt(br.readLine())); //리스트에 입력
Collections.sort(list); // 정렬
double sum = 0;
for (int value : list) // sum 계산 및 빈도 계산
sum += value;
double avg = Math.round(sum / list.size()); // 1.평균
int median = list.get(list.size() / 2); // 중앙값
int mode = mode(list);
int range = list.get(list.size() - 1) - list.get(0); // 범위
System.out.println((int) avg + "\n" + median + "\n" + mode + "\n" + range + "\n");
}
static int mode(ArrayList<Integer> list) { //최빈값
int[] cnt = new int[8001]; //입력되는 정수의 최대 절댓값은 4000
ArrayList<Integer> indexlist = new ArrayList<Integer>();
int max = 2;
for (int value : list) { //리스트의 각 수들 검사
cnt[value + 4000]++; //그 수의 빈도 높이기
if (cnt[value + 4000] > max) { //최빈값 이상의 값 등장
max = cnt[value + 4000];
indexlist.clear(); //최빈값 리스트 클리어
indexlist.add(value); //새로운 최빈값 삽입
} else if (cnt[value + 4000] == max) { //최빈값
indexlist.add(value); //최빈값 리스트에 삽입
}
}
if (indexlist.isEmpty()) { //최빈값이 모두 1로 같으면
if (list.size() == 1) //수가 하나뿐이면
return list.get(0); //하나의 수 출력
else
return list.get(1); // 두 번째로 작은 값 출력
} else if (indexlist.size() == 1) { //최빈값이 하나
return indexlist.get(0);
} else {
return indexlist.get(1);
}
}
}
실화냐?!
실화다.
이 문제가 뭐라고....아직 한참 멀었군