[99클럽 코테 스터디 5주차 보너스문제 TIL] 백준 2108번 통계

말하는 감자·2024년 11월 29일
0
post-thumbnail

99클럽 코테 스터디 5주차 보너스문제 TIL

💙 JAVA 비기너

📌 오늘의 학습 키워드

  • 정렬

📌 공부한 내용

📍 오늘의 문제

📍작성 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;

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 num[] = new int[N];
		int sum = 0;
		
		for(int i=0; i<N; i++) {
			int x = Integer.parseInt(br.readLine());
			num[i] = x;
			sum += x;
		}

		br.close();
		Arrays.sort(num);
		
		// 산술평균
		bw.write((int)Math.round((double)sum/num.length) + "\n");
		
		// 중앙값
		bw.write(num[num.length/2] + "\n");
		
		// 최빈값
		int RANGE = 8001;
		int count[] = new int[RANGE];
		int maxCnt = 0;
		
		for(int i=0; i<num.length; i++) {
			count[num[i] + 4000]++; 
			maxCnt = Math.max(count[num[i]+4000], maxCnt);
		}
		ArrayList<Integer> maxList = new ArrayList<>();
		for(int i=0; i<RANGE; i++) {
			if(maxCnt == count[i]) maxList.add(i-4000);
		}
		bw.write(((maxList.size() <= 1) ? maxList.get(0) : maxList.get(1)) + "\n");
		
		// 범위
		bw.write((num[num.length - 1] - num[0]) + "\n");
		
		bw.flush();

        bw.close();
		
    }
}

📌 오늘의 회고

- 산술평균 : N개의 수들의 합을 N으로 나눈 값
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이

1. 산술평균

입력받은 숫자들의 합을 숫자의 개수N으로 나누면 된다.

2. 중앙값

N은 홀수라는 조건이 있으므로 순서대로 정렬했을 때 가운데값을 가져오면 된다.

3. 최빈값

가장 어려웠던 녀석...
질문게시판과 블로그를 통해 알게 된 것은 카운팅 정렬을 사용하는 것이다.

입력되는 정수의 절댓값은 4,000을 넘지 않으므로 -4,000~4,000까지의 수를 가질 수 있다.
8,001개의 범위를 갖는 정수 정렬 count를 선언한다. count의 입력받은 수+4000을 한 인덱스에 입력받은 수의 나타난 수를 기록한다.
count에 저장된 정수 중 가장 큰 정수를 maxCnt에 저장한 후 maxCnt만큼 나타났던 숫자들을 maxList에 넣어 자동 정렬을 시켜준다.

마지막으로 maxList의 요소가 한개 이하라면 첫번째 요소를 출력하고 여러개라면 두번째로 작은 값인 maxList.get(1)을 출력한다.

3. 범위

가장 큰 값에서 가장 작은 값을 빼면 된다.

profile
나는 말하는 감자다

0개의 댓글