티스토리 뷰

Algorithm/BOJ

백준 2108번 C++

poopooreum 2023. 8. 4. 19:08
반응형

백준 2108번 통계학
https://www.acmicpc.net/problem/2108

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net



정답 코드

#include<iostream>
#include<vector>
#include<algorithm>
#include<cmath>
using namespace std;
int arr[8001];
int arr2[500001];
int result;
int main() {
	int num, max2 = -4001, min2 = 9998, count1 = 0, index, max1 = -1;
	double sum = 0;
	cin >> num;
	for (int x = 0; x < num; x++) {
		cin >> arr2[x];
		arr[arr2[x] + 4000] += 1;
		sum += arr2[x];
	}
	sum /= (double)num;
	sum = floor(sum + 0.5);
	sort(arr2, arr2+num);
	for (int x = 0; x < 8001; x++) {
		if (max1 < arr[x])
			max1 = arr[x];
	}
	for (int x = 0; x < 8001; x++) {
		if (max1 == arr[x]) {
			count1++;
			index = x;
		}
		if (count1 == 2)
			break;
	}
	printf("%0.lf\n%d\n%d\n%d\n", sum, arr2[num/2],index-4000 , arr2[num-1]-arr2[0]);
}


문제 풀이
수학적인 계산을 출력하는 문제입니다. 문제 난이도는
쉬운 편이나 음수를 처리하는 과정이 주의가 필요합니다. 일종의 카운팅 정렬 방식을 이용하는데 배열에는 음수의 인덱스가 존재할 수 없으므로 0번째 인덱스가 -4000, 1번째 인덱스가 -3999이런 식으로 설정을 해주어야 합니다. 카운팅 정렬을 사용하는 이용하는 이유는 최빈값을 구하기 위함입니다.

반응형

'Algorithm > BOJ' 카테고리의 다른 글

백준 2161번 C++  (0) 2023.08.04
백준 2133번 C++  (0) 2023.08.04
백준 2003번 C++  (0) 2023.08.04
백준 1991번 C++  (0) 2023.08.04
백준 1990번 C++  (0) 2023.08.04
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함