728x90
풀이
최빈값을 구하는게 조금 까다로웠다.
int mode = arr[0], cnt = 1, temp_cnt, temp;
for (int i = 1; i < N; i++){
if (temp_cnt > cnt){
mode = arr[i];
temp_cnt = 0;
}else if (temp_cnt == cnt)
temp = arr[i];
if (arr[i] == mode) cnt++;
else if (arr[i] != arr[i-1]) temp_cnt = 0;
else temp_cnt++;
}
이후 mode와 temp 중 큰 값을 출력하는 방식으로 Test Case 예제는 통과했으나, 결과는 틀린것으로 나왔다.
때문에 이번 문제는 평범하게 -4000 ~ 4000의 범위에 해당하는 배열을 이용해 풀이했다.
- -4000 ~ 4000 중 입력받은 수에 해당하는 index의 값을 증가시키고, 최빈값의 개수를 저장했다.
- -4000부터 저장한 최빈값의 개수를 찾는데, 만약 두 번째 최빈값을 찾는다면 그 값이 최빈값중 두 번째로 작은 값이므로 탐색을 종료하고, 최빈값을 반환한다.
소스코드
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b){
int n1 = *(int*)a, n2 = *(int*)b;
if (n1 < n2)
return -1;
else if (n1 > n2)
return 1;
return 0;
}
int median(int *arr, int N){
if (N == 1)
return arr[0];
return arr[(N+1) / 2 - 1];
}
int mode(int *arr, int N){
int num[8001] = {0,}, max = 0, cnt = 0, idx;
for (int i = 0; i < N; i++){
num[idx = arr[i] + 4000]++;
max < num[idx] && (max = num[idx]);
}
idx = 0;
for (int i = 0; i < 8001 ; i++)
if (num[i] == max)
if (!cnt){
idx = i;
cnt++;
} else if (cnt == 1){
idx = i;
break;
}
return idx - 4000;
}
int main(){
int N, val;
scanf("%d", &N);
double sum = 0;
int arr[N];
for (int i = 0; i < N; i++){
scanf("%d", &arr[i]);
sum += arr[i];
}
qsort(arr, N, sizeof(int), compare);
printf("%.0f\n%d\n%d\n%d\n", sum/N, median(arr, N), mode(arr, N), arr[N-1] - arr[0]);
}
출처 및 참고자료
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
산술 평균 - 위키백과, 우리 모두의 백과사전
수학과 통계학에서 산술 평균(算術平均, arithmetic mean)은 주어진 수의 합을 수의 개수로 나눈 값이다. 산술 평균은 수학과 통계학 뿐 아니라, 경제학, 인류학, 역사학 등의 많은 분야에서 빈번하게
ko.wikipedia.org
중앙값 - 위키백과, 우리 모두의 백과사전
중앙값(中央-, 영어: median) 또는 중위수(中位數)는 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미한다. 예를 들어 1, 2, 100의 세 값이 있을 때, 2가 가장 중앙에
ko.wikipedia.org
최빈값 - 위키백과, 우리 모두의 백과사전
최빈값 위키백과, 우리 모두의 백과사전.
ko.wikipedia.org
728x90
'PS > Baekjoon Online Judge' 카테고리의 다른 글
[백준 2805] 나무 자르기 [C] (0) | 2021.07.29 |
---|---|
[백준 01016] 제곱 ㄴㄴ 수 [C] (0) | 2021.07.29 |
[백준 1966] 프린터 큐 [C] (0) | 2021.07.28 |
[백준 1904] 01타일 [C] (0) | 2021.07.28 |
[백준 1929] 소수 구하기 [C] (0) | 2021.07.28 |