- 4번 문제
https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
- 산술평균 : N개의 수들의 합을 N으로 나눈 값
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이
-조건
- N(1 ≤ N ≤ 500,000)인 홀수
- 입력되는 정수의 절댓값은 4,000
-필요한 알고리즘
Counting Sort
-당님 코드
#include<iostream>
#include<algorithm>
#include<cmath>
#include<vector>
using namespace std;
//사용할 변수, 배열 선언
//입력되는 정수가 -4000~4000일 수 이므로 인덱스가 음수가 되는것을 피하기 위해
//arrayInt 배열을 8001의 크기를 가진 배열로 선언
int arrayNum[500001], arrayInt[8001];
int num,mean,meidan,mode,range;
int sum = 0;
int main() {
//N입력
cin >> num;
for(int i=0; i<num; i++){
//입력된 N만큼 배열 arrayNum에 정수들 입력
cin >>arrayNum[i];
//각 입력된 요소 arrayNum[i]의 합을 sum에 저장
sum += arrayNum[i];
//arrayInt배열의 (arrayNum배열의 element) index를 1 증가
arrayInt[arrayNum[i] + 4000]++;
}
//배열 arrayNum을 입력된 N까지 오름차순으로 정렬
sort(arrayNum, arrayNum +num);
int flag;
int max = 0;
//가장 많이 등장한 수를 flag에 저장하는 알고리즘
for (int i = 0; i < 8001; i++)
{
//max보다 arrayInt[i]의 element가 크다면
if (arrayInt[i] > max)
{
//max에 arrayInt[i]의 element 저장
max = arrayInt[i];
//flag(최빈값+4000)는 i로 저장
flag = i;
}
}
//최빈값이 2개 이상일 때 두번째로 작은값을 출력하는 알고리즘
for (int i = flag + 1; i < 8001; i++)
{
//max 값과 같은 element를 가진 index가 있다면
if (arrayInt[i] == max)
{
//최빈값을 다시 저장
flag = i;
break;
}
}
//산술평균( 평균값이 실수일 수 있으므로 round로 반올림 후 mean에 저장)
mean = round(double(sum) / num);
//중앙값 (sort된 arrayNum의 중앙index값을 median에 저장
meidan = arrayNum[(num-1) / 2];
//최빈값 (flag가 최빈값 + 4000이므로 다시 4000을 빼준다)
mode = flag-4000;
//범위 (sort된 arrayNum의 N-1인덱스 element와 첫번째 element의 차를 range에 저장)
range = arrayNum[num-1] - arrayNum[0];
//출력
cout << mean << "\n";
cout << meidan << "\n";
cout << mode << "\n";
cout << range << "\n";
return 0;
}
-참고자료
https://st-lab.tistory.com/104
자바 [JAVA] - 카운팅 정렬 (Counting Sort / 계수 정렬)
[정렬 알고리즘 모음] 더보기 1. 계수 정렬 (Counting Sort) - [현재 페이지] 2. 선택 정렬 (Selection Sort) 3. 삽입 정렬 (Insertion Sort) 4. 거품 정렬 (Bubble Sort) 5. 셸 정렬 (Shell Sort) 6. 힙 정렬 (H..
st-lab.tistory.com
'지-코바' 카테고리의 다른 글
[지코바] 6회차 문제풀이 (0) | 2022.04.14 |
---|---|
[지코바] 5회차 문제풀이 - 홍님 (0) | 2022.03.31 |
[지코바] 3회차 문제풀이 (0) | 2022.02.03 |
[지코바] 2회차 문제풀이 (0) | 2022.01.14 |
[지코바] 12/10 문제풀이 (0) | 2021.12.10 |