SMALL
안녕하세요 오늘은 특정 알고리즘을 사용하지 않아도 되는 문제를 풀어보겠습니다.
이 문제는 다른것들은 어렵지 않은데 3번째로 출력해야하는 것이 조금 까다롭습니다.
우선은 8001짜리 길이의 배열을 만들어주어, -4000~4000의 숫자들을 관리할 수 있게 하겠습니다. 그런다음 int x로 인풋을 받고 그 값을 4000 더해준 배열의 위치의 값에 1을 더해줍니다.
배열의 원소들 중 최대값(최빈수)을 구해준다음, 그 최대값을 배열에서 검색해서 그 위치를 알아낸다음 두번째 값에다가 4000을 빼준값을 출력하면 됩니다.
코드:
#include <bits/stdc++.h>
#include <vector>
using namespace std;
int main(){
int N, sum= 0;
cin>>N;
vector<int> v;
vector<int> res(8001);
for(int i= 0; i<N; i++){
int x;
cin>> x;
v.push_back(x);
res[x+4000]++;
sum+= x;
}
sort(v.begin(), v.end());
int mid = ((N+1)/2) - 1, result_2 = v[mid];
int df = v[N-1] - v[0], max_count = 0, max = -1000000000;
for(int i = 0; i<8001; i++){
if(max<res[i]) max= res[i];
}
int index;
for(int i = 0; i<8001; i++){
if(res[i] ==max) {
max_count++;
index= i-4000;
}
if(max_count==2){
index = i-4000;
break;
}
}
cout<<round(sum/(double)N)<<"\n";
cout<<result_2<<"\n";
cout<<index<<"\n";
cout<<df<<endl;
}
LIST
'BOJ 문제풀이' 카테고리의 다른 글
백준 2920번 c++ 풀이 (0) | 2021.08.04 |
---|---|
백준 2475번 c++ 풀이 (0) | 2021.08.04 |
백준 10814 번 c++ 풀이 (0) | 2021.08.03 |
백준 1181번 c++ 풀이 (0) | 2021.08.03 |
백준 11651번 c++ 풀이 (0) | 2021.08.03 |