BOJ 문제풀이

백준 2108번 c++ 풀이

koreasunoo 2021. 8. 4. 22:31

안녕하세요 오늘은 특정 알고리즘을 사용하지 않아도 되는 문제를 풀어보겠습니다.

 

이 문제는 다른것들은 어렵지 않은데 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;
}

'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