4가지 통계값 찾기 문제를 풀어보자
2018, Aug 01
백준의 2108번 문제를 풀어보았다.
문제는
- 산술평균 구하기
- 중앙값 구하기
- 최빈값 구하기
- 범위
이다. 자세한 문제 사항은 이 링크를 참조하자
내가 만든 소스부터 블로깅하고
다른 사람이 만든 소스는 분석하여 다시 블로깅 하겠다.
int main()
{
int cnt; scanf_s("%d", &cnt);
int inputNum;
int res_average = 0;
float average_f = 0.f;
int mediumIndx = cnt / 2;
int bucket[8001] = { 0 };
int max_value = -4001;
int min_value = 40001;
int range = 0;
for (int i = 0; i < cnt; i++)
{
scanf_s("%d", &inputNum);
average_f += inputNum;
bucket[inputNum + 4000]++;
if (inputNum < min_value)
min_value = inputNum;
if (inputNum > max_value)
max_value = inputNum;
}
/// 산술평균
if (cnt != 0)
{
if (average_f < 0)
res_average = average_f / cnt - 0.5f;
else
res_average = average_f / cnt + 0.5f;
}
printf("%d\n", res_average);
/// 중앙값
int mediumCnt = 0;
int mediumValue = 0;
int mediumChecked = 0;
/// 최빈값
int manyValue = -4001;
int maxCnt = 0; int isEqual = 0;
for (int i = 0; i < 8001; i++)
{
if (!mediumChecked)
{
mediumCnt += bucket[i];
if (mediumCnt - 1 >= mediumIndx)
{
mediumValue = i;
mediumChecked = 1;
}
}
if (bucket[i] > maxCnt)
{
manyValue = i;
maxCnt = bucket[i];
isEqual = 0;
}
else if (bucket[i] == maxCnt)
isEqual = 1;
}
printf("%d\n", mediumValue-4000);
int second = 0;
if (isEqual)
{
for (int i = 0; i < 8001; i++)
{
if (bucket[i] == maxCnt)
second++;
if (second == 2)
{
printf("%d\n", i - 4000);
break;
}
}
}
else if (isEqual == 0)
printf("%d\n", manyValue - 4000);
/// 범위
range = max_value - min_value;
printf("%d\n",range );
return 0;
}