수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
- 산술평균 : N개의 수들의 합을 N으로 나눈 값
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.
둘째 줄에는 중앙값을 출력한다.
셋째 줄에는 최빈값을 출력한다. 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.
넷째 줄에는 범위를 출력한다.
import java.io.*;
import java.util.*;
public class Main {
//시작점
public static void main(String[] args)throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = Integer.parseInt(br.readLine());
int [] nums = new int [n];
int sum = 0 ;
Map<Integer , Integer> cntMap = new HashMap<>();
for(int i = 0; i<n; i++){
nums[i] = Integer.parseInt(br.readLine());
sum += nums[i];
int cnt = cntMap.getOrDefault(nums[i],0);
cntMap.put(nums[i] ,cnt +1);
}
Arrays.sort(nums); //2. 중앙값
int maxFreq = Collections.max(cntMap.values());
List<Integer> modes = new ArrayList<>();
for(Map.Entry<Integer,Integer> entry : cntMap.entrySet()){
if(entry.getValue() == maxFreq){
modes.add(entry.getKey());
}
}
Collections.sort(modes);
int mode = (modes.size() > 1)? modes.get(1) : modes.get(0);
bw.write(Math.round((float)sum/n) +"\n");
bw.write(nums[n/2] + "\n");
bw.write(mode + "\n");
bw.write(nums[n-1] - nums[0]+ "\n") ;
bw.flush();
bw.close();
}
}
1. 산술평균 sum, n 이 둘다 int형인걸 생각 못하고 단순히 나누기만 해버렸다.
double, float 둘중 하나로 cast 해줘야 소수점 이하 첫째자리에서 반올림가능
2. 중앙값 출력은 단순하게.
3. 최빈값을 출력할때 처음으로 Collections을 써봤다.
조금 더 공부하고 써봐야 할듯. Collectins과 Entry
4. 범위도 단순하게 최댓값과 최솟값을 빼줌.
2번과 4번은 배열 정렬만 할 줄 알면 구할 수 있다.
오랜만에 푸니까 버퍼도 낯설어..!!
역시 코테는 꾸준히 해야한다 ㅠㅠ
'코딩테스트 > 백준' 카테고리의 다른 글
백준 - [Silver III] 1, 2, 3 더하기 - 9095 (java) (0) | 2025.04.01 |
---|---|
[Silver III] 1로 만들기 - 1463 (java) (0) | 2025.04.01 |
백준 - [Silver IV] 붙임성 좋은 총총이 - 26069 (java) (0) | 2025.02.28 |
백준 - [Silver IV] 요세푸스 문제 0 - 11866 (java) (1) | 2025.02.17 |
백준 - [Silver IV] 덱 2 - 28279 (java) (1) | 2025.02.11 |