웹개발 교육/Java

[31일] Java (17) - 연습 문제

ewok 2022. 9. 7. 16:55

문제

// 문제) 표준편차(Standard deviation) 구하기

int[] aver = {85, 90, 93, 86, 82};
double result=sd(aver);
System.out.printf("표준편차 : %.2f", result);
/*
  	1) aver의 평균(87.2)를 구하고, aver의 각 요소에서 87.2를 뺀다
  	   85-87.2 = -2.2
  	   90-87.2 = 2.8
  	   93-87.2 = 5.8
  	   86-87.2 = -1.2
  	   82-87.2 = -5.2
  
    2) 1)의 값을 전부 양수로 바꾼다 -> 편차
       2.2
       2.8
       5.8
       1.2
       5.2
       
    3) 2)의 편차들의 평균값 : 표준편차
   	   (2.2 + 2.8 + 5.8 + 1.2 + 5.2) / 5 -> 3.44

*/

 

풀이

package oop0907;

public class Test04_quiz {

	//내 풀이
    public static double sd(int[] aver) {
		//aver 평균
		double hap = 0;
		for(int i=0; i<aver.length; i++) {
			hap = hap + aver[i];
		}//for end
		double avg = hap/aver.length;
		
		//1)
		double[] bbae = {0, 0, 0, 0, 0};
		for(int i=0; i<aver.length; i++) {
			bbae[i] = aver[i]-avg;
//			System.out.printf("%.1f", bbae[i]);
//			System.out.println();
		}//for end
		
		//2)
		for(int i=0; i<aver.length; i++) {
			bbae[i] = Math.abs(bbae[i]);
//			System.out.printf("%.1f", bbae[i]);
//			System.out.println();
		}//for end
		
		//3)
		double deohae = 0;
		for(int i=0; i<aver.length; i++) {
			deohae = deohae + bbae[i];
		}//for end
		
		return deohae/aver.length;
		
		
	}//sd() end
	
	////////////////////////////////////////////////
	// 다른 풀이
	
	public static double sd(int[] aver) {
		int size = aver.length;  //요소의 갯수 : 5
		
		//1) aver 각 요소의 누적의 합 구하기
		double hap=0.0;
		for(int i=0; i<size; i++) {
			hap = hap + aver[i];
		}//for end
		
		//aver 요소들의 평균 구하기(87.2)
		double avg=hap/size;
		
		double sum=0.0;  //편차들의 총 합계
		for(int i=0; i<size; i++) {
			//aver의 각 요소에서 avg 값과의 차이를 구하고
			double d=aver[i]-avg;
			
			//2)단계
			//->avg(87.2)와의 차이값을 전부 양수로 바꾼다(편차)
			d=Math.abs(d);
			
			//2)에서 나온 편차들을 누적한다 (2.2 + 2.8 + 5.8 + 1.2 + 5.2)
			sum=sum+d;
		}//for end
		
		//3)단계 : 표준폍차
		return sum/size;
	}//sd() end