문제보기
import java.util.*;
import java.io.*;
class myNum{ // 최빈값 구할 때 사용할 클래스
int num;
int cnt;
myNum(int num, int cnt){
this.num = num;
this.cnt = cnt;
}
}
public class Main{
public static void main(String []args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] num = new int[n]; // 주어진 숫자를 담을 배열
// 차례대로 평균값, 중앙값, 최빈값, 최대최소차이값
double a = 0.0;
int b = 0;
int c = 0;
int d = 0;
for(int i = 0 ; i < n ; i++){
num[i] = Integer.parseInt(br.readLine()); // 숫자 입력 받기
a += num[i]; // 평균값에 차곡차곡 넣어줌
}
if( n == 1 ){ // 만약 숫자가 1개만 들어올 경우 - 예외처리
System.out.println(num[0]+"\n"+num[0]+"\n"+num[0]+"\n0");
return;
}
// 오름차순으로 정리
Arrays.sort(num);
a = Math.round(a/n); // 합이 모두 더해져 있으므로 전체갯수로 나눠준 뒤 반올림하면 끝
b = num[n/2]; // 중앙값이니까 중앙번째 값 넣어줌
d = num[n-1] - num[0]; // 양끝값이 최대 최소 이므로
List<myNum> list = new ArrayList<>(); // 숫자별 갯수를 입력받을 리스트
int cnt = 1;
for(int i = 1 ; i < n ; i++){
int now = num[i];
int prev = num[i-1];
if( now == prev ) cnt++;
else{
list.add(new myNum(prev, cnt));
cnt = 1; // 초기화
}
if( i == n-1 ){ // 마지막 처리
list.add(new myNum(now, cnt));
}
}
list.sort(new Comparator<myNum>(){
@Override
public int compare(myNum o1, myNum o2){
if(o1.cnt > o2.cnt){ // 최빈값이 앞으로 오도록
return -1;
}else if(o1.cnt == o2.cnt){ // 만약 같다면 숫자 순서대로
return o1.num - o2.num;
}else{
return 1;
}
}
});
if( list.get(0).cnt > list.get(1).cnt ){ // 최빈값이 한개면
c = list.get(0).num; // 출력
}else{ // 최빈값이 여러개면
c = list.get(1).num; // 두번째로 작은 값 출력
}
System.out.println((int)a+"\n"+b+"\n"+c+"\n"+d);
}
}
Comments