[알고리즘] 평균 구하기

2024. 7. 17. 20:20WebBack/알고리즘

 

더보기

1단계

 

문제분석)

위 문제는 배열과 리스트 중에 어느 것이 적합할까?

-> 배열이 더 적합하다. 그 이유는 다음과 같다.

1. 첫째 줄 입력을 통해 배열의 크기를 알 수 있다. (크기 고정) 

2. 배열에 있는 데이터에 모두 접근을 해야한다. (접근 빠름)

 

입력값이 여러개면 어떻게 이를 인식해야할까?

각 입력값은 " "을 사이에 두고 있다. split으로 나누어 배열에 저장할 수 있다. 

 

오차 범위를 어떻게 줄일까?

-> int가 아니라 float으로 숫자를 받았다. 

더보기

2단계

 

1) 첫번째 입력값을 받는다. (inputA)

2) 두번째 입력값을 받는다. (inputB)

3) 두번째 입력값을 split을 통해 배열로 만든다. (StrArr)

4) 숫자가 들어갈 배열을 만든다. (floatArr)

5) for문을 통해 최댓값을 구한다. 

6) 모든 배열의 값을 100과목/최댓값으로 바꾼다. 

7) 배열의 모든 값을 변수에 저장한다(total)

8) 배열의 크기로 나눈다(aver)

import java.util.Scanner;

class Main {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    float max = 0;
    float total = 0;
    float aver = 0;

    int inputA = sc.nextInt(); //1번

    sc.nextLine();

    String inputB = sc.nextLine(); //2번

    String[] strArr = inputB.split(" "); //3번
    float[] floatArr = new float[inputA]; //4번

    for(int i = 0; i < strArr.length; i++){
      floatArr[i] = Float.parseFloat(strArr[i]); //5번
    }

    for(int i = 0; i < floatArr.length; i++){
      if(max < floatArr[i])
        max = floatArr[i]; //6번
    }

    for(int i = 0; i < floatArr.length; i++){
      floatArr[i] = floatArr[i]*100/max; 
      total += floatArr[i]; //7번
    }

    aver = total/inputA; //8번

    System.out.print(aver);
  }
}

 

오차를 줄이기 위해서 printf로 소수점 15자리까지 표현하도록 속도가 약간 늦어져서 기존을 유지하였다. 

import java.util.Scanner;

class test {
  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int A[] = new int[N];
    for(int i = 0; i < N; i++){
      A[i] = sc.nextInt();
    }
    long sum = 0;
    long max = 0;
    for(int i = 0; i < N; i ++){
      if(A[i] > max) max = A[i];
      sum += A[i];
    }

    System.out.println(sum * 100.0/max/N);
  }
}

 

https://www.acmicpc.net/problem/1546