이우의 개발일지
[백준/C++] 2108번 통계학 본문
백준 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;
}
반응형
'Coding' 카테고리의 다른 글
[백준/C++] 9095번 1,2,3 더하기 (DP 문제) (0) | 2024.05.19 |
---|---|
[백준/C++] 1463번 1로 만들기 - (1) (0) | 2024.05.18 |
[프로그래머스/C++] PCCP 기출문제 1번 / 붕대 감기 (0) | 2024.05.18 |
[백준/C++] 2563번 색종이 (0) | 2024.05.17 |
[백준/C++] 1158번 요세푸스 문제 [1] (0) | 2024.05.17 |