반응형
백준 2108번 문제 - 통계학
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
문제 분석
- 수를 N개 입력 받고, 다음 4가지 값을 출력해라
- 산술평균 : N개의 수들의 합을 N으로 나눈 값 (소수점 이하 첫째자리에서 반올림한 값)
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값 (여러개 일 경우 2번째로 작은 값)
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이
해결 키 포인트
- 반올림하는 방법 : (int) Math.round((double)sum/N)
- 최빈수 구하는 법
- 숫자 정렬
- 최빈수를 숫자 리스트 생성
- 최빈수 개수 기록
- 숫자가 바뀌면 현재 숫자 개수 초기화
- 이전 숫자 개수가 최빈수와 동일할 경우: 리스트 추가
- 이전 숫자 개수가 최빈수보다 큰 경우: 리스트 초기화 및 추가
코드
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;
for (int i = 0; i < N; i++) {
nums[i] = Integer.parseInt(br.readLine());
sum += nums[i];
}
// 정렬
Arrays.sort(nums);
// 최빈수 구하기
ArrayList<Integer> manyNum = new ArrayList<>();
int manyCount = -1;
int checkNum = 9999;
int checkCount = 0;
for (int i = 0; i < N; i++) {
if(checkNum != nums[i]) {
if(manyCount < checkCount) {
manyCount = checkCount;
manyNum.clear();
manyNum.add(checkNum);
}
else if(manyCount == checkCount) {
manyCount = checkCount;
manyNum.add(checkNum);
}
checkCount = 1;
checkNum = nums[i];
}
else {
checkCount++;
}
}
// 제일 큰 수도 체크
if(manyCount < checkCount) {
manyNum.clear();
manyNum.add(checkNum);
}
else if(manyCount == checkCount) {
manyNum.add(checkNum);
}
// 최빈수가 여러개일 경우 2번째 작은 수로
Collections.sort(manyNum);
int frequent = (manyNum.size() >= 2) ? manyNum.get(1) : manyNum.get(0);
// 평균
int avg = (int) Math.round((double)sum/N);
// 중간값
int mid = nums[N/2];
// 큰 값 - 작은 값
int maxToMin = nums[N-1] - nums[0];
bw.write(avg+"\n");
bw.write(mid+"\n");
bw.write(frequent+"\n");
bw.write(maxToMin+"\n");
bw.flush();
bw.close();
}
}
반응형
'CodingTEST' 카테고리의 다른 글
[백준 1181] 단어 정렬 (JAVA) (0) | 2023.11.30 |
---|---|
[백준 1966] 프린터 큐 (JAVA) (0) | 2023.11.30 |
[백준 1654] 랜선 자르기 (JAVA) (4) | 2023.11.24 |
[백준 18111] 마인크래프트 (JAVA) (2) | 2023.11.24 |
[백준 14503] 로봇 청소기 (JAVA) (0) | 2023.11.23 |