[C++] 백준 2108 : 통계학
#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
int N, x, sum = 0;
int visit[8001] = {0};
int main(int argc, char **argv){
scanf("%d",&N);
vector<int> v;
for(int i=0; i<N; i++){
scanf("%d",&x);
v.push_back(x);
visit[v[i] + 4000]++; //개수 세기
sum += x;
}
sort(v.begin(),v.end()); //정렬
printf("%d\n", (int)round((double)sum/N)); // 산술평균 - round 반올림
printf("%d\n", v[N/2]); //중앙값
int idx, max = 0;
for (int i = 0; i < 8001; i++) // -4000 ~ 4000
{
if (visit[i] > max){ // 최빈값 찾기
max = visit[i]; // 비교값
idx = i; // 최빈값 저장
}
}
for (int i = idx + 1; i < 8001; i++) { // 최빈값 다음부터 search
if ((visit[i] == max)){ // 최빈값 또 있을 경우
idx = i; // 최빈값 저장
break;
}
}
printf("%d\n", idx - 4000);
printf("%d\n", v[v.size() -1] - v[0]); // 범위
return 0;
}
최빈값에서 STL의 upper_bound와 lower_bound를 사용해보려 애쓰다가 다른 방식으로 틀어 풀게 된 문제.
최빈값을 찾을 때는 index에 해당 개수를 세는 것이 제일 효율적인 것 같다. 크기가 너무 많지 않은 경우에는!
Author And Source
이 문제에 관하여([C++] 백준 2108 : 통계학), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@lamknh/C-백준-2108-통계학저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)