반응형
이 문제는 SW 기출 문제는 아니지만,,
내가 예전에 못 풀었던 문제라 기록하려 한다..!
중요한 점은
1. 산술평균 시, Double로 연산하되 마지막에 int로 캐스팅해서 -0이 안 나오게끔.
2. 최반값 구할 때, 도수분포표 정렬을 이용해서 커스텀 연산자 비교함수를 만들어서 정의
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int cmp(pair<int, int> a, pair<int, int> b) {
if(a.first == b.first)
return a.second < b.second;
else
return a.first > b.first;
}
int main() {
int N, MOST, tmp;
vector<int> v;
vector<pair<int, int>> dosu;
cin >> N;
for(int i = 0; i < 8001; i++) {
dosu.push_back({0, i});
}
for(int i = 0; i < N; i++) {
cin >> tmp;
v.push_back(tmp);
}
sort(v.begin(), v.end());
double Total = 0;
for(int i = 0; i < N; i++) {
Total += v[i];
dosu[v[i] + 4000].first = dosu[v[i] + 4000].first + 1;
}
sort(dosu.begin(), dosu.end(), cmp);
if(dosu[0].first == dosu[1].first) // 최반값 같은게 두 개가 넘어가
MOST = dosu[1].second;
else // 최빈값 가장 큰 게 한 개 뿐.
MOST = dosu[0].second;
cout << (int)round(Total / N) << "\n"; // 마지막에 int로 캐스팅해서, -0이 안나오고 0이 나오게.
cout << v[N / 2] << "\n";
cout << MOST - 4000 << "\n";
cout << v[N - 1] - v[0] << "\n";
}
새로 알게 된 점은,,
vector<pair<int, int>> v 가 있을 때,
v[i].first = v[i].first + 1; 이런식으로 값을 곧바로 수정할 수 있다는 점이다.
(안될 줄 알았는데 된다)
반응형
'[백준]' 카테고리의 다른 글
[BaekJoon/백준] 2251번 물통 (0) | 2022.06.26 |
---|---|
[BaekJoon/백준] 14891번 톱니바퀴 (0) | 2022.06.26 |
[BaekJoon/백준] 14503번 로봇 청소기 (0) | 2022.06.25 |
[BaekJoon/백준] 15685번 드래곤 커브 (0) | 2022.06.25 |
[BaekJoon/백준] 14502번 연구소 (0) | 2022.06.24 |