반응형
문제 링크
코드
#include <bits/stdc++.h>
using namespace std;
int arr[500001], cnt[8001];
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
int n, sum = 0, mean, mode, mode_cnt = 0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
sum += arr[i];
cnt[arr[i] + 4000]++;
mode_cnt = max(cnt[arr[i] + 4000], mode_cnt);
}
mean = round((double)sum / n);
if (mean == -0) mean = 0;
sort(arr, arr + n);
bool isSecond = false;
for (int i = -4000; i <= 4000; i++) {
if (cnt[i + 4000] == mode_cnt) {
mode = i;
if (isSecond) break;
isSecond = true;
}
}
cout << mean << '\n';
cout << arr[n / 2] << '\n';
cout << mode << '\n';
cout << arr[n - 1] - arr[0];
}
설명
최빈값 구하기 (여러 개 있을 때에는 최빈값 중 두 번째로 작은 값 구하기)
1. 최대 빈도 값을 구한다.
2. cnt 배열을 순회하면서 최대 빈도 값과 같은지 비교한다.
첫 번째로 같다면 최빈값을 저장하고 isSecond를 참으로 저장한다.
두 번째로 같다면 최빈값을 저장하고 반복문을 탈출한다.
문제 설명에도 있지만 -0을 출력하면 안 된다.
(주의) 기록용으로 작성한 글입니다. 좋은 코드가 아닐 수 있습니다.
댓글 환영합니다!
반응형
'Algorithm > BOJ' 카테고리의 다른 글
[백준/BOJ] 2142번 - 정돈된 배열 (C++) (0) | 2022.03.22 |
---|---|
[백준/BOJ] 2163번 - 초콜릿 자르기 (C++) (0) | 2022.03.22 |
[백준/BOJ] 2010번 - 플러그 (C++) (0) | 2022.03.22 |
[백준/BOJ] 1934번 - 최소공배수 (C++) (0) | 2022.03.22 |
[백준/BOJ] 1920번 - 수 찾기 (C++) (0) | 2022.03.22 |
댓글