1. 문제 설명
[문제 링크](https://www.acmicpc.net/problem/2108)
산술 평균, 중앙값, 최빈값, 범위를 구하면 된다.
2. 푸는 원리
산술 평균 -> 총합 / 머릿수
중앙값: 중앙에 있는 녀석 계산
최빈값: TreeMap을 사용 Key = 입력 받은 값, value = 해당 값이 나온 횟수, TreeMap은 순서가 보장됨으로, 입력을 한번 정렬한 후에 TreeMap에 넣으면 된다.
범위 : 최대값 - 최소값
3. 코드 분석
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.TreeMap;
/*
* 2108번 통계학
* */
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
TreeMap<Integer, Integer> map = new TreeMap<>();
StringBuilder sb = new StringBuilder();
int N = Integer.parseInt(br.readLine());
int [] arr = new int[N];
for (int i = 0; i < N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
int acc = 0;
for (int i = 0; i < N; i++) {
acc +=arr[i];
if(map.get(arr[i]) == null){
map.put(arr[i], 1);
}else{
map.put(arr[i], map.get(arr[i])+1);
}
}
// 평균
sb.append(Math.round((float) acc /N)).append("\n");
// 중앙값
sb.append(arr[N/2]).append("\n");
// 최빈값
int mostButSecond = 0;
int mostCnt = 0;
boolean changeOnce = false;
for (int temp : map.keySet()){
if(mostCnt < map.get(temp)){
// 모든 값 갱신
mostButSecond = temp;
mostCnt = map.get(temp);
changeOnce = false;
}
else if(mostCnt == map.get(temp) && !changeOnce && mostButSecond < temp){
mostButSecond = temp;
changeOnce = true;
}
}
sb.append(mostButSecond).append("\n");
sb.append(arr[arr.length-1] - arr[0]);
System.out.println(sb);
}
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[코드 트리] 배열 회전 2 Java (0) | 2024.06.14 |
---|---|
💚 백준 1940 주몽 (0) | 2024.05.06 |
💜 백준 10250 ACM 호텔 (0) | 2024.04.23 |
💜 백준 11729번 하노이 탑 이동순서 (0) | 2024.04.20 |
💜 백준 1874번 스택 수열 (0) | 2024.04.20 |