문제
https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
풀이
문제를 보면 입력값이 -4000부터 +4000까지 입력될 수 있다.
이를 위해 입력부터 +4000을 해주고 max값 8000까지 배열을 할당하도록 하자.
최빈값 조건만 유의한다면 다음과 같이 풀 수 있다.
코드
#include<iostream>
#include<unordered_map>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
int N;
vector<int> arr;
vector<int> result;
int map[8002]; //-4000~8000
int main() {
//N홀수
cin >> N;
for (int i = 0; i < N; i++) {
int a;
cin >> a;
arr.push_back(a);
}
// 산술평균
int temp = 0;
for (int j = 0; j < arr.size(); j++) {
temp += arr[j];
}
result.push_back(round((double)temp / arr.size()));
//중앙값
sort(arr.begin(), arr.end());
result.push_back(arr[arr.size() / 2]);
//최빈값, 여러개 존재하면 두번째로 작은값`
for (int i = 0; i < arr.size(); i++) {
map[arr[i]+4000]++;
}
int max = 0;
int check = 0;
for (int i = 0; i < 8001; i++) {
if (max < map[i]) {
max = map[i];
check = i;
}
}
for (int j = check + 1; j < 8001; j++) { // 최빈값 여러개일경우
if (map[j] == max) {
check = j;
break;
}
}
result.push_back(check-4000);
//범위
result.push_back(arr[arr.size() - 1] - arr[0]);
for (int k = 0; k < result.size(); k++) {
cout << result[k] << '\n';
}
return 0;
}
'알고리즘 공부 > 백준' 카테고리의 다른 글
[백준] 파티 (1238/C++) (0) | 2023.09.30 |
---|---|
[백준] 상어 초등학교 (21608/C++) (0) | 2022.03.12 |
[백준] 나는야 포켓몬 마스터 이다솜 (1620/C++) (0) | 2022.01.31 |
[백준] 경로 찾기 (11403/C++) (0) | 2022.01.30 |
[백준] 최대 힙 (11279/C++) (0) | 2022.01.26 |