Notice
Recent Posts
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
관리 메뉴

이우의 개발일지

[백준/C++] 2108번 통계학 본문

Coding

[백준/C++] 2108번 통계학

공대이우 2024. 5. 18. 21:21

백준 2108번 통계학 

https://www.acmicpc.net/problem/2108

 

이 문제에서 너무 어렵게 생각했던 점은 입력되는 값이 음수일 수도 있으니, 그 값을 어떻게 처리하냐의 문제였다. 

입력되는 정수의  절댓값은 절대 4000이 넘지 않는다. 라고 되어있어서 다른 풀이를 보니 arr[8001] 같이 아예 전체 음수까지해서 범위를 8000이라고 둔 것이다. 

 

문제 풀 때는 범위확인을 잘해서 내가 배열범위를 미리 지정해줘도 괜찮은 값이면 쓰는게 나을 것 같다. 

#include<iostream>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;

int main() {
	int n; 
	cin >> n;
	vector<int> vec;
	vector<int> che;
	double a=0;
	int result[4] = { 0, };
	int arr[8001] = { 0, };

	for (int i = 0; i < n; i++) {
		int num;
		cin >> num;
		vec.push_back(num);
		//che.push_back(0);
		a += num;
		arr[num + 4000]++;
	}

	a = round(a / n);
	if (a == -0) a = 0;
	std::cout << a << endl;
	//
	sort(vec.begin(), vec.end());
	std::cout << vec[vec.size() / 2] << endl;
	//
	int max = 0;
	int number = 0;
	int tmp = 0;
	int flag = 0;
	int max_num = 0;
	for (int i = 0; i < 8001; i++) {
		if (arr[i] > max_num) {
			max_num = arr[i];
			tmp = i;
			flag = 0;
		}
	}
	for (int i = 0; i < 8001; i++) {
		if (arr[i] == max_num) {
			number++;
			max = i;
		}
		if (number == 2) break;
	}
	//sort(che.begin(), che.end());
	std::cout << max - 4000 << endl;
	/*int check = 0;
	int max = 0;
	int flag = 0;
	int max_num = vec[0];
	for (int i = 0; i < vec.size(); i++) {
		if (vec.size() == 1) break;
		while (1) {
			int j = i+1;
			
			if(vec[i] != vec[j] || j == vec.size() -1) {
				if (check >= max) {
					max = check;
					max_num = vec[i];
					break;
				}
				else {
					check = 0;
					break;
				}
			}
			else if(vec[i] == vec[j]) {
				check++;
				j++;
			}
		}
	}*/
	//
	result[3] = vec[vec.size() - 1] - vec[0];
	std::cout << result[3] << endl;

	
	return 0;
}

 

반응형