https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
문제 풀이
이 문제 풀 때 어려웠던 점은 산술평균과 최빈값을 구하는 과정이었던 것 같다.
산술 평균의 경우에는 float로 바꾼 후 연산하고 cmath의 round를 이용해 값을 구했다.
최빈값 같은 경우에는 숫자가 나온 횟수를 저장하는 cnt배열을 만들어 숫자를 저장한 후 값들을 비교해 최빈값을 구했다.
소스 코드
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
vector<int> num;
int cnt[8001] = { 0 };
int main() {
int N;
int sum = 0;
cin >> N;
for (int i = 0; i < N; i++) {
int a;
cin >> a;
num.push_back(a);
sum += a;
cnt[a + 4000] += 1;
}
sort(num.begin(), num.end());
// 산술평균
int mean = round((float)sum / N);
cout << mean << '\n';
// 중앙값
cout << num[N / 2] << '\n';
// 최빈값
bool first = false;
int max_count = 0;
int max_num = -4001;
for (int i = 0; i < N; i++) {
int idx = num[i];
int b = cnt[idx+4000]; //횟수
if (max_count < b) {
first = false;
max_num = idx;
max_count = b;
}
else if (max_count == b) {
if (first == false && idx != max_num) {
first = true;
max_num = idx;
}
}
}
cout << max_num << '\n';
//범위 출력
cout << num.back() - num.front() << '\n';
}
'알고리즘' 카테고리의 다른 글
[백준] 2503번 숫자 야구 C++ 문제풀이 (1) | 2023.08.10 |
---|---|
[백준] 1300번 K번째 수 C++ 문제풀이 (0) | 2023.08.09 |
[백준] 1339번 단어 수학 C++ 문제풀이 (0) | 2023.08.07 |
[백준] 9663번 N-Queen C++ 문제풀이 (0) | 2023.08.06 |
[백준] 1713번 후보 추천하기 C++ 문제풀이 (0) | 2023.08.05 |