공부/백준

2108번: 통계학(백준 C++)

상연 2020. 10. 30. 18:21

목차

2108번: 통계학 링크

코드

#include <iostream>
using namespace std;

int main() {
    int num[8001] = {0, };
    int n, tmp;
    scanf("%d", &n);

    double avg = 0.0;
    int mid = 10000, cnt = 0, min = 4000, max = -4000;
    int old_mode = 4000;
    int mode = 4000;

    for(int i=0; i<n; i++){
        scanf("%d", &tmp);
        num[4000 + tmp] += 1;

        if(tmp < min) min = tmp;
        if(tmp > max) max = tmp;
    }

    for(int j=8000; j>=0; j--){
        avg += (-4000 + j) * num[j];

        if(mid == 10000 && cnt + num[j] >= (n / 2) + 1 ){
            mid = -4000 + j;
        }
        else{
            cnt += num[j];
        }

        if(num[j] > num[mode + 4000]){
            old_mode = -4000 + j;
            mode = -4000 + j;
        }
        else if(num[j] == num[mode + 4000]){
            old_mode = mode;
            mode = -4000 + j;
        }
    }
    avg = avg / n;
    printf("%.0f\n", avg);
    printf("%d\n", mid);
    printf("%d\n", old_mode);
    printf("%d\n", max - min);

}

사견

풀면서 python numpy가 너무 그리웠다...
한 번 numpy 맛을 봤던 나로서는 이 문제가 너무 귀찮았다... 사랑해요 라이브러리

뭐 결국은, 귀찮을 뿐이지 어려운 문제는 아니다.

이전에 했던 카운팅 정렬로 들어온 입력값을 정렬해 준 후,
그 값들을 토대로 통계를 하면 된다.