📍 문제 설명
💡 접근
산술 평균, 중앙 값, 범위에 대해서는 별 문제 없이 풀었다.
하지만 최빈값에서 계수 정렬을 하려고 하니 음수 값도 들어와서 문제가 생겼다.
일단 맵에 해당 숫자의 키와 갯수를 넣어뒀다.
그리고 최빈값이 등장할 때 마다 리스트를 초기화시키면서 최빈값이 여러개 나올 때만 더해주는 식으로 했다.
👩💻 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
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[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
//산술 평균
double sum = 0;
for(int i = 0; i < n; i++) {
sum += arr[i];
}
System.out.println(String.format("%.0f", sum/n));
//중앙값
int[] clone = arr.clone();
Arrays.sort(clone);
System.out.println(clone[clone.length/2]);
//최빈값
HashMap<Integer,Integer> map = new HashMap<>();
for(int x : arr) {
map.put(x, map.getOrDefault(x, 0) + 1);
}
int max1 = Integer.MIN_VALUE;
int key = 0;
ArrayList<Integer> list = new ArrayList<>();
//키들을 탐색
for(int x : map.keySet()) {
//최빈값을 찾았을 때
if(map.get(x) > max1) {
max1 = map.get(x);
list.clear();
list.add(x);
}
//최빈값이 겹칠 때
else if(map.get(x) == max1) {
list.add(x);
}
}
Collections.sort(list);
if(list.size() > 1) System.out.println(list.get(1));
else System.out.println(list.get(0));
//최댓값과 최솟값의 차
int max = Arrays.stream(arr).max().getAsInt();
int min = Arrays.stream(arr).min().getAsInt();
System.out.println(max-min);
}
}