반응형
728x170
음 이제부터 무조건 float 절대 안 쓰고.. double 써야징 ㅎㅎ
물론 메모리는 더 먹지만.. float으로 오차가 생기는 것보단 훨씬 낫다.
https://www.acmicpc.net/problem/2108
# 맞는 풀이
#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
//산술 평균을 위해 필요한 값 - 원소의 개수, 원소의 합
//최빈값 "" - 해당 원소의 출현 횟수
//중앙값 - 해당 원소를 내림차순 또는 오름차순으로 정렬 -> but 항상 홀수의 개수를 가지므로 (원소 사이즈 + 1)/2 idx에 존재
//최대,최소 - 원소를 입력받으며 최소 최대값 갱신.
//원소의 개수, 원소의 합을 위한 벡터
vector<int> V;
//최빈값
int num[10001]; //대충 -4000 ~ 4000
//어차피 다 뒤지는데 1만번 연산 밖에 안함.
int main() {
int n;
cin >> n;
double size = n; // 사이즈
double sum = 0; // 합
int M, m; // 최대, 최소
m = 4001;
M = -4001;
while (n--) {
int a;
cin >> a;
sum += a; // 합
if (a < m) m = a; // 최소
if (a > M) M = a; // 최대
num[a + 4000] += 1; // 빈도수 -> 음수 인덱스가 없어야 하기 때문.
V.push_back(a);
}
int result = *max_element(num, num + 10000); // 최대 빈도 수 -> 이거
int rep; //최빈 값
int cnt = 0; // 2번째로 작은 값을 위한 조건
for (int i = 0; i < 8001; i++) {
if (cnt == 2)break;
if (num[i] == result) {
rep = i;
cnt++;
}
}
rep -= 4000;
sort(V.begin(), V.end()); // 오름차순 정렬
cout << round((double)(sum /size)) << "\n";
cout << V[size / 2] << "\n";
cout << rep << "\n";
cout << (M - m) << "\n";
}
728x90
반응형
그리드형
'문제풀이(Problem Solving)' 카테고리의 다른 글
백준, BOJ, 1793번 C++ [CPP] (0) | 2021.05.30 |
---|---|
주어진 좌표에서 가장 가까운 값 추출하기 - C#, Unity (0) | 2021.05.30 |
백준, BOJ, 9095번 C++ [CPP] (0) | 2021.05.27 |
백준, BOJ, 1463번 C++ [CPP] (0) | 2021.05.27 |
백준, BOJ, 15683번 C++ [CPP] ** (0) | 2021.05.27 |