[백준/실버3] 백준 2108번 통계학 - c++ (수학/ 구현/ 정렬 알고리즘) 문제 해석/코드 설명
코딩테스트 타파하기 1주차 - 2번
#include <cmath>
round(num);
round 함수 : 반올림하는데 이용할 수 있다.
-> 문제에 적용 : 문제에서 산술평균을 구할 때 소수점 이하 첫째
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr); cout.tie(nullptr);
vector<int> v;
int n=0;
int num=0;
cin >> n;
for(int i=0; i<n; i++){ //벡터(자유크기)에 값 넣어주기
cin >> num;
v.push_back(num);
}
sort(v.begin(), v.end()); //정렬 -> 중앙값, 범위를 구하기 위해서
//산술평균 구하기
double sum=0;
for(int i=0; i<v.size(); i++){
sum+=v[i]; //벡터값을 다 더해준다.
}
double N = round(sum/v.size()); //반올림 해준다.
if(N==-0){ //(0 + 0 + (-1)) / 3 = -0.333333... 이고 이를 첫째 자리에서 반올림하면 0이다. -0으로 출력하면 안된다.
cout << 0<<"\n"; //-0이면 0을 출력하도록 해준다.
}
else{
cout << N<<"\n";
}
//중앙값
int vsize = v.size();
cout << v[vsize/2]<<"\n";
//최빈값
int arr[8001] ={0, };
for(int i=0; i<vsize; i++){
arr[v[i]+4000]++; //-4000부터니깐 +4000을 해서 0~8000으로 할 수 있도록 해준다.
}
vector<int> maxidx;
int count =0; //최빈값의 수
for(int i=0; i<=8000; i++){
if(arr[i]>=count){
if(arr[i]==count){ //만약 최빈값의 수가 같으면 벡터에 넣어준다.
maxidx.push_back(i);
}
else{
maxidx.clear(); //최빈값보다 더 큰 값이 나오면 벡터를 비워주고 다시 새로운 인덱스를 넣어준다.
maxidx.push_back(i);
count = arr[i]; //그 뒤 count값을 다시 넣어준다. -> 이 뒤 이 값으로 계속 비교
}
}
}
if(maxidx.size()>1){ // 최빈값이 같은 인덱스가 여러개
cout << maxidx[1]-4000 <<"\n"; //어차피 오름차순으로 들어감 -> 2번째 수를 출력 근데 앞에서 4000 더했으니깐 4000빼준다.
}
else{
cout << maxidx[0]-4000 <<"\n"; //최빈값이 같은 인덱스가 오직 하나.
}
//범위
cout << v[vsize-1]- v[0]; //제일 큰값 - 제일 작은 값
return 0;
}
[백준/실버3] 2108번 통계학 - c++ (수학/ 구현/ 정렬 알고리즘) 문제 해석/코드 설명
[백준/실버4] 백준 10610번 30 - c++ (수학/그리디 알고리즘/ 문자열/ 정렬/ 정수론) 문제 해석/코드 설명 (2) | 2024.03.18 |
---|---|
[백준/실버5] 백준 10814번 나이순 정렬 - c++ (정렬 알고리즘) 문제 해석/코드 설명 (1) | 2024.03.14 |
[백준/실버5] 백준 13241번 최소공배수 - c++ / 유클리드 호제법(최대공약수, 최소공배수) 문제 해석/코드 설명 (0) | 2024.03.12 |
[백준] 4049 균형잡힌 세상 실버 4 - stack (0) | 2023.07.22 |
[백준] 2839 설탕배달 실버 4 C++ (0) | 2023.07.22 |
댓글 영역