Algorithm/백준 알고리즘

백준_2108 통계학(자바) / 정렬

미스터로즈 2021. 8. 1. 23:38

시간&메모리 제한

 

문제

 

입력&출력

 

문제 풀이

package com.back;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Back_2108 {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();
		int N = Integer.parseInt(br.readLine());
		int[] arr = new int[N];
		int[] arr2 = new int[8001];
		int sum=0;
		for (int i = 0; i < N; i++) {
			int tmp = Integer.parseInt(br.readLine());
			sum +=tmp;
			arr[i]=tmp;
			arr2[tmp+4000]++;
		}
		int avg=0;
		if (sum < 0) {
			avg = -(int) (0.5 + (double) -sum / N);
		} else {
			avg = (int) (0.5 + (double) sum / N);
		}
		sb.append(avg+"\n");
		Arrays.sort(arr);
		sb.append(arr[N/2]+"\n");
		
		int max=0;
		boolean flag = false;
		for (int i = 0; i < 8001; i++) {
			if(arr2[i]>max) {
				max = arr2[i];
				flag=false;
			}else if(arr2[i]==max) {
				flag=true;
			}  
		}
		if(flag==false) {
			for (int i = 0; i < 8001; i++) {
				if(arr2[i]==max) {
					sb.append(i-4000+"\n");
					break;
				}
			}
		}else {
			boolean second=false;
			for (int i = 0; i < 8001; i++) {
				if(arr2[i]==max && second==true) {
					sb.append(i-4000+"\n");
					break;
				}
				if(arr2[i]==max && second==false) {
					second=true;
				}
			}
		}
		
		if(N==1) {
			sb.append("0\n");
		}else {			
			sb.append(arr[N-1]-arr[0]+"\n");
		}
		System.out.println(sb);
	}
}

 

- 평균값, 중앙값, 최빈값, 범위를 구하는 문제입니다.

 

- -4000~4000의 범위를 0~8000의 범위로 표현해줬습니다.

 

- 반올림 해주는 부분과 최빈값을 구하는 부분이 좀 까다로웠던 문제입니다.