Skip to content

Commit

Permalink
2108
Browse files Browse the repository at this point in the history
  • Loading branch information
sohyundoh committed Mar 19, 2022
1 parent 1475d8b commit 75fc545
Showing 1 changed file with 37 additions and 56 deletions.
93 changes: 37 additions & 56 deletions [스택, 큐, 덱] 3월 17일/2108.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,63 +2,44 @@
#include <vector>
#include <algorithm>
#include <cmath>

using namespace std;
int cnt[8001] = { 0, }; // 빈도 카운트하는 배열

int findMode() { // 최빈값 찾기
int max = 0, max_cnt = 0, mode = 0;
for (int i = 0; i < 8001; i++) {
if (max < cnt[i]) { // 최댓값 갱신
max = cnt[i]; max_cnt = 1;
mode = i - 4000;
}
else if (max == cnt[i]) max_cnt++; // 기존의 최댓값과 동일한 경우

// (최빈값이 여러 개인 경우 두번째로 작은 값이 최빈값)
if (max == cnt[i] && max_cnt == 2) mode = i - 4000;
}
return mode;
}

int main() {
int N;
cin >> N;
int aver = 0, mid, mode, ran;
vector<int> v(N);
vector<int> answer(8001);
for (int i = 0; i < N; i++) {
cin >> v[i];
aver += v[i];
}
int n, sum = 0;
cin >> n;

vector<int> arr;
arr.assign(n, 0);

for (int i = 0; i < n; i++) {
cin >> arr[i];
sum += arr[i];
cnt[arr[i] + 4000]++;
}

sort(arr.begin(), arr.end()); // 오름차순 정렬

int min = v[1], max = v[1];//range를 구하기 위해서
for (int i = 0; i < N; i++) {
int index;
if (min > v[i]) min = v[i];
if (max < v[i]) max = v[i];
if (v[i] == 0) {
index = v[i];//최빈값 구하기 위해 index 값 지정
}
else if (v[i] < 0) {
index = -v[i];
}
else if (v[i] > 0) {
index = v[i] + 4000;
}
answer[index]++;
}
ran = max - min;
aver = floor((aver / N) + 0.5); //반올림 함수 사용!
sort(v.begin(), v.end());
mid = v[(int)(N / 2)];
int max_index = 0; //최빈값을 구하기 위해 가장 큰 index값
bool flag = true;
int cnt = 0;
for (int i = 0; i < 8001; i++) {
if (max_index <= answer[i]) {
//최빈값이 두개일 경우
if (flag && answer[i] == max_index) {
if (cnt == 3) {//두번째로 작은 최빈값
flag = false;
break;
}
cnt++;
}
if (i > 0 && i < 4001) {
mode = -i;
}
else if (i >= 4001) {
mode = i - 4000;
}
else if (i == 0) {
mode = i;
}
max_index = answer[i];
}
}
cout << aver << "\n" << mid << "\n" << mode << "\n" << ran;
cout << round((double)sum / n) << '\n'; // 산술 평균
cout << arr[n / 2] << '\n'; // 중앙값
cout << findMode() << '\n'; // 최빈값
cout << arr[n - 1] - arr[0]; // 범위

}
return 0;
}

0 comments on commit 75fc545

Please sign in to comment.