되는대로 살자

[C언어 기출문제&풀이] 분산 본문

2009~2014/C/C++

[C언어 기출문제&풀이] 분산

malu 2010. 11. 14. 15:19
프로그램 명: variation
제한시간: 1 초
  • A 반의 학생 수가 3 명 이고 , 각 학생의 수학 점수가 3,4,5
  • B 반의 학생 수가 3 명 이고 , 각 학생의 수학 점수가 1,4,7
A 반의 평균은 4 , B 반의 평균은 4 로 같다.

그런데 두 반의 점수의 흩어진 정도는 B 반이 더 크지만 평균으로는 흩어진 정도는 알수는 없다. 흩어진 정도를 측정하는 대표적인 방법이 분산(variation) 이다.

분산은 각 데이터(변량)에서 평균값을 뺀 값의 제곱의 합을 인원수로 나누는 것으로 약속한다.

  • A 반의 분산은 (3-4)^2 + (4-4)^2 + (5-4)^2 를 3 으로 나눈 값이고
  • B 반의 분산은 (1-4)^2 + (4-4)^2 + (7-4)^2 를 3 으로 나눈 값이다.

분산이 더 크다는 것은 흩어진 정도(산포도)가 더 크다는 것을 의미한다.

문제는 반의 인원수와 수학점수가 주어질 때 이 반의 수학점수의 분산을 구하는 것이다.

입력

첫 째 줄에는 인원 수 n 이 입력으로 주어진다. 다음 줄에는 n 개의 정수가 입력으로 주어진다. 각 수는 1 이상 100 이하이다.

n 은 3 이상 100 이하이다.

출력

소수 2 자리까지 출력한다.

입출력 예

입력

4 
1 2 3 4

출력

1.25
출처:dovelet
소스코드 
 int n,i,jumsu[100];
 float average=0,variance=0;
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
  scanf("%d",&jumsu[i]);
  average+=jumsu[i];
 }
 average/=n;
 for(i=0;i<n;i++)
  variance+=(jumsu[i]-average)*(jumsu[i]-average);
 printf("%2.2f",variance/=n);
}