์ค๋ฒ4 : ์ ๋ ฌ
์๊ฐ
์ต๋น๊ฐ ๊ตฌํ ๋, ๋จธ๋ฆฌ๋ฅผ ์ข ์จ์ผํ๋ค. map๊ตฌ์กฐ๋ฅผ ์ ์จ๋ณผ ๊ฒ. ๊ทธ๋ฆฌ๊ณ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ๋ ๊ณ ๋ฏผํด๋ณผ ๊ฒ.
Code
//
// main.cpp
// test2
//
// Created by ์ต์์ on 2021/03/29.
//
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int N = 0;
int input[500001] = {0,};
int temp[500001] = {0,};
int a = 0;
int b = 0;
int c = 0;
int d = 0;
bool comp(const pair<int, int> &p1, const pair<int, int> &p2){
if (p1.second == p2.second) {
return p1.first < p2.first;
}
return p1.second > p2.second;
}
void merge(int left, int right){
int mid = int((left+right)/2);
int i = left, j = mid+1, k = left;
while (i <= mid && j <= right) {
if (input[i] <= input[j]) {
temp[k] = input[i];
i++;
} else {
temp[k] = input[j];
j++;
}
k++;
}
int tmp = (i > mid) ? j : i;
while(k <= right){
temp[k] = input[tmp];
k++;
tmp++;
}
for (int i = left; i <= right; i++) {
input[i] = temp[i];
}
}
void partition(int left, int right){
if (left >= right) {
return;
}
int mid = int((left+right)/2);
partition(left, mid);
partition(mid+1, right);
merge(left, right);
}
int main(){
cin >> N;
for (int i = 0; i < N; i++) {
cin >> input[i];
a += input[i];
}
a = int(round(float(a)/N)); // ์ฐ์ ํ๊ท
partition(0, N-1); // ์ ๋ ฌ
b = input[int(N/2)]; // ์ค์๊ฐ
// ์ต๋น๊ฐ
vector<pair<int, int>> st;
for (int i = 0; i < N; i++) {
if (st.empty()) {
st.push_back(pair<int, int>(input[i], 1));
continue;
}
if (st.back().first == input[i]) {
pair<int, int> tmp = st.back();
tmp.second++;
st.pop_back();
st.push_back(tmp);
} else {
st.push_back(pair<int, int>(input[i], 1));
}
}
sort(st.begin(), st.end(), comp);
if (st[0].second == st[1].second) {
c = st[1].first;
} else {
c = st[0].first;
}
// ๋ฒ์
d = input[N-1] - input[0];
cout << a << '\n';
cout << b << '\n';
cout << c << '\n';
cout << d << '\n';
return 0;
}