-
[백준/C++] 2108번 통계학개발/알고리즘 2019. 4. 26. 02:49
문제출처: https://www.acmicpc.net/problem/2108
문제
코드
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263#include <bits/stdc++.h>using namespace std;int n, m;vector<int> v;double sum = 0;struct freq {int value;int num;};bool comperator(freq &a, freq &b) {if(a.num == b.num) {return a.value < b.value;} else {return a.num > b.num;}}int main() {ios::sync_with_stdio(0);cin.tie();cin >> n;for(int i = 0; i < n; i++) {cin >> m;v.push_back(m);}sort(v.begin(), v.end());for(int i = 0; i < v.size(); i++) {sum += v[i];}cout << round(sum / (double)v.size()) << "\n";cout << v[v.size()/2] << "\n";vector<freq> v2;for(int i = 0; i < v.size(); i++) {freq f = {v[i], 0};if(v2.empty()) {v2.push_back(f);continue;}if(v2.back().value == v[i]) {v2.back().num += 1;} else {v2.push_back(f);}}sort(v2.begin(), v2.end(), comperator);if((v2.size() > 1) && (v2[0].num == v2[1].num)) {cout << v2[1].value << "\n";} else {cout << v2[0].value << "\n";}cout << v.back() - v.front() << "\n";}cs 해결 방법
산술평균, 중앙값, 범위를 구하는건 아주 쉽게 구할 수 벡터 STL에서 제공하는 함수로 쉽게 구할 수 있습니다.
위 코드에서 최빈값은, 해당 값과 빈도수를 가진 구조체를 벡터에 넣어서, 정렬 함수를 만들어서 정렬 후 출력하는 방법으로 해결하였습니다.
'개발 > 알고리즘' 카테고리의 다른 글
[백준/C++] 2750번 수 정렬하기 (0) 2019.04.25 [백준/C++] 1929번 소수 구하기 (0) 2019.04.25 [백준/C++] 2581번 소수 (0) 2019.04.25 [백준/C++] 1978번 소수 찾기 (0) 2019.04.25 [알고리즘/프로그래머스] 해시 > 완주하지 못한 선수 (JAVA) (1) 2019.01.29