티스토리 뷰

코딩테스트/백준

[BJ] 2108. 통계학

jhk828 2021. 3. 29. 01:32

www.acmicpc.net/problem/2108

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

 

1. float보다 double 형이 더 넓은 범위 값

2. double형을 반올림해서 int형으로 나타내기 Math.round(실수)

3. 음수 범위의 수까지 count 하기 위해 양수화 하기

N * 2 + 1 크기의 int형 count 배열을 선언한다. (0도 포함하기 위해 +1)

 

import java.io.*;
import java.util.*;
// 210328

/*
	1. 산술평균 : 전체합 / 개수, 반올림 : Math.round(float() ) -> 결과는 int형
	2. 중앙값 : 정렬 후 N/2번째 수
	3. 최빈값 : 
		1) int형 count 배열 사용
		   음수도 처리하기 위해 양수화 
	    2) HashMap 사용 ? 
	    
	4. 범위 : 정렬 후 최대 (N-1번째 수) - 최소 (0번째 수 )
*/

public class Main_BJ_2108_통계학 {
	public static void main(String[] args) throws Exception {
		// System.setIn(new FileInputStream("res/input_BJ_2108_통계학.txt"));
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		
		int N = stoi(br.readLine());
		int[] arr = new int[N];
		int[] count = new int[4000*2+1];
		double sum=0;
		int modeCnt =0;
		
		// 입력
		for(int i=0; i<N; i++) {
			arr[i] = stoi(br.readLine());
			sum += arr[i]; // 1. 산술평균
			count[arr[i]+4000]++; // 3. 최빈값
			if(modeCnt < count[arr[i]+4000]) modeCnt = count[arr[i]+4000]; // 3. 최빈값
		}
		
		// 1. 산술 평균 - 소수점 이하 첫째 자리에서 반올림, sum을 float형으로
		System.out.println(Math.round(sum / N));
	
		// 2. 중앙값
		Arrays.sort(arr);
		System.out.println(arr[N/2]);
		
		// 3. 최빈값, 최빈값 여러 개일 때는 두번째로 작은 값 출력
		ArrayList<Integer> modes = new ArrayList<>();
		for(int i=0; i<4000*2+1; i++) {
			if(count[i]==modeCnt) modes.add(i-4000);
		}
		
		Collections.sort(modes);
		if(modes.size()==1) System.out.println(modes.get(0));
		else System.out.println(modes.get(1));
		
		// 4. 범위 출력
		System.out.println(arr[N-1] - arr[0] );		

		br.close();
	}
	
	static int stoi(String str) {
		return Integer.parseInt(str);
	}
}

'코딩테스트 > 백준' 카테고리의 다른 글

[BJ] 19237. 어른 상어  (0) 2021.04.14
[BJ] 16973. 직사각형 탈출  (0) 2021.04.01
[BJ] 1181. 단어 정렬  (0) 2021.03.28
[BJ] 11651. 좌표 정렬하기2  (0) 2021.03.28
[BJ] 11650. 좌표 정렬하기  (0) 2021.03.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함