BOJ 2108 통계학

1 개요[ | ]

BOJ 2108 통계학
  • 네가지 통계값을 구하는 문제

2 C++[ | ]

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    cin >> N;
    
    map<int, int> m;
    int x;
    int sum = 0;
    for(int i=0; i<N; i++) {
        cin >> x;
        sum += x;
        if( m.find(x) == m.end() ) m[x] = 1;
        else m[x]++;
    }
    int min = 4000;
    int max = -4000;
    int maxCount = 0;
    int median = -9999;
    int sumCount = 0;
    int k, v;
    vector<int> modes;
    for(auto& el: m) {
        k = el.first;
        v = el.second;
        if(k < min) min = k;
        if(k > max) max = k;
        if(v == maxCount) {
            modes.push_back(k);
        } else if(v > maxCount) {
            maxCount = v;
            modes.clear();
            modes.push_back(k);
        }
        sumCount += v;
        if(median == -9999 && sumCount > N/2) {
            median = k;
        } 
    }
    int mode;
    if(modes.size()>1) mode = modes[1];
    else mode = modes[0];

    cout << int(round(1.0*sum/N)) << endl;
    cout << median << endl;
    cout << mode << endl;
    cout << max - min << endl;
}

3 Java[ | ]

import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
	public static void main(String args[]) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int size = Integer.parseInt(br.readLine());
		int arr[] = new int[size];
		int counts[] = new int[8001];
		int i, num, sum=0, min=4000, max=-4000, max_count=0;
		for(i=0; i<size; i++) {
			num = Integer.parseInt(br.readLine());
			arr[i] = num;
			sum += num;
			if( num > max ) max=num;
			if( num < min ) min=num;
			counts[4000+num]++;
			if( counts[4000+num]>max_count ) max_count = counts[4000+num];
		}
		int freq2 = 0, freq_count = 0;
		for(i=min; i<=max && freq_count<2; i++) {
			if( counts[4000+i] != max_count ) continue;
		    freq2 = i;
		    freq_count++;
		}
		Arrays.sort(arr);
		System.out.println( Math.round(1.0D*sum/size) );
		System.out.println( arr[size/2] );
		System.out.println( freq2 );
		System.out.println( max-min );   
	}
}

4 Perl[ | ]

use List::Util qw(sum max); use POSIX;
$N = int(<>);
push @a, $str=<> for (1..$N);
$c{$_}++ for @a = sort {$a <=> $b} @a;
$m = max values %c;
($c{$_} eq $m)?push @modes, $_:'' for (keys %c);
@modes = sort {$a <=> $b} @modes;
@result = (
    floor((sum(@a)*2+$N)/$N/2),
    $a[int($N/2)],
    $modes[1 % @modes],
    $a[-1] - $a[0]
);
printf("%d\n" x 4, @result);

5 PHP[ | ]

<?php
$N = intval(fgets(STDIN));
$a = [];
for($i=0; $i<$N; $i++) $a[] = intval(fgets(STDIN));
sort($a);
$mean = floor((array_sum($a)*2+$N)/$N/2);
$median = $a[intdiv($N,2)];
$c = array_count_values($a);
$m = max($c);
$modes = array_filter($c, function($ele) use($m) {
    return ($ele == $m); 
});
$modes = array_keys($modes);
$mode = $modes[ 1 % count($modes) ];
$range = $a[$N-1] - $a[0];
echo $mean . "\n";
echo $median . "\n";
echo $mode . "\n";
echo $range . "\n";

6 Python[ | ]

import sys
import collections
N = int(input())
a = sorted(map(int,sys.stdin))
mean = (sum(a)*2+N)//N//2
median = a[N//2]
c = collections.Counter(a)
m = max(c.values())
modes = sorted(i for i in c if c[i]==m)
mode = modes[1%len(modes)]
range = a[-1] - a[0]
print( mean )
print( median )
print( mode )
print( range )
문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}