본문 바로가기
아기 개발자/백준 문제풀이

[BOJ_JAVA] 백준 2108번 : 통계학 @달깅

by 달깅 2019. 11. 15.

https://www.acmicpc.net/problem/2108

 

아 이문제 진짜 오래걸렸는데 자잘한 실수들로 계속 답이 틀려서 답답했다.

평균을 n으로 나눴을 때 인트가 나와서ㅠㅠ (float)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 [] arr=new int[n];
        int[] count=new int[8001];
        int[] most=new int[8001];

        int sum=0;
        int min=4001;
        int max=-4001;
        int how=0;
        int idx=0;
        int realmost;
        
        for (int i=0; i<n; i++) {
            arr[i]=Integer.parseInt(br.readLine());
            if (arr[i]<min) {
                min=arr[i];
            }
            if (arr[i]>max) {
                max=arr[i];
            }
            sum+=arr[i];
            count[arr[i]+4000]++;
        }

        Arrays.sort(arr);
        float ave=sum/(float)n;

    
  
        for (int i=0; i<count.length; i++) {
            if (count[i]>how) {
                idx=0;
                most[1]=0;
                how=count[i];
                most[idx]=i-4000;
                idx++;
            } else if (count[i]==how && how!=0) {
                most[idx]=i-4000;
                idx++;
            } 
        }

        if (most[1]==0) {
            realmost=most[0];
        } else {
            realmost=most[1];
        }
        


        bw.write(Integer.toString(Math.round(ave))+"\n");
        bw.write(Integer.toString(arr[n/2])+"\n");
        bw.write(Integer.toString(realmost)+"\n");
        bw.write(Integer.toString(max-min)+"\n");
        bw.close();
    }
}

댓글