https://www.acmicpc.net/problem/2108
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
// (1 ≤ N ≤ 500,000)
// 단, N은 홀수이다.
int N;
// 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
double element;
vector <double> v;
// 산술평균
double mean = 0;
// 중앙값
double median = 0;
// 최빈값
double mode = 0;
// 범위
double range = 0;
// 첫째 줄에 수의 개수 N이 주어진다.
cin >> N;
for (int i = 0; i < N; i++) {
// 다음 N개의 줄에는 정수들이 주어진다.
cin >> element;
v.push_back(element);
}
// 1. 산술평균 : N개의 수들의 합을 N으로 나눈 값
for (int i = 0; i < N; i++) {
mean += v[i];
}
// 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.
mean = round(mean / N);
// -0 출력 방지
if (mean == -0) {
mean = 0;
}
// 2. 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우
// 그 중앙에 위치하는 값
sort(v.begin(), v.end());
if (N == 1) {
median = v[0];
}
else {
median = v[(N - 1) / 2];
}
// 3. 최빈값 : N개의 수들 중 가장 많이 나타나는 값
int count[8001] = { 0, };
for (int i = 0; i < N; i++) {
// 4-1. 0 또는 양수일 경우
if (v[i] >= 0) {
count[int(v[i])]++;
}
// 4-2. 음수일 경우
else {
// fabs() 함수는 부동 소수점 인수 x의 절대값을 연산합니다.
count[int(fabs(v[i])) + 4000]++;
}
}
// 최빈값이 여러개일 경우
int max = count[0];
int index = 0;
for (int i = 0; i < 8001; i++) {
if (max < count[i]) {
index = i;
max = count[i];
}
}
vector <double> mv;
for (int i = 0; i < 8001; i++) {
if (max == count[i]) {
if (i <= 4000) {
mv.push_back(i);
}
else {
mv.push_back((i - 4000) * (-1));
}
}
}
// 정렬. 두번째로 작은 최빈값 출력
sort(mv.begin(), mv.end());
// 최빈값이 하나인 경우
if (mv.size() == 1) {
mode = mv[0];
}
// 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.
else {
mode = mv[1];
}
// 4. 범위 : N개의 수들 중 최댓값과 최솟값의 차이
range = v[N - 1] - v[0];
// 첫째 줄에는 산술평균을 출력한다.
cout << mean << endl;
// 둘째 줄에는 중앙값을 출력한다.
cout << median << endl;
// 셋째 줄에는 최빈값을 출력한다.
cout << mode << endl;
// 넷째 줄에는 범위를 출력한다.
cout << range << endl;
return 0;
}
https://beginnerdeveloper-lit.tistory.com/149
[C++] 백준 2108번 통계학
1. 문제이해 https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은
beginnerdeveloper-lit.tistory.com
https://www.ibm.com/docs/ko/i/7.3?topic=functions-fabs-calculate-floating-point-absolute-value
fabs() — 부동 소수점 절대값 연산
형식 #include double fabs(double x); 설명 fabs() 함수는 부동 소수점 인수 x의 절대값을 연산합니다. 리턴값 fabs() 함수는 절대값을 리턴합니다. 오류 리턴값이 없습니다. 예 이 예는 x의 절대값으로 y를
www.ibm.com
'알고리즘 > solved.ac CLASS 2' 카테고리의 다른 글
18110번: solved.ac (0) | 2024.06.25 |
---|---|
11651번: 좌표 정렬하기 2 (0) | 2024.06.18 |
1676번: 팩토리얼 0의 개수 (0) | 2024.06.16 |
28702번: FizzBuzz (1) | 2024.06.16 |
30802번: 웰컴 키트 (1) | 2024.06.14 |