BOJ

[백준 1546번/JAVA] 평균 | 배열

syj0522 2024. 3. 5. 20:49

문제

풀이

  1. N을 입력받고, 길이가 N인 배열을 선언한다.
  2. N만큼 반복하며 점수를 입력받고, max를 구한다.
  3. 현재 점수/max* 100을 구하고 배열에 입력한다. sum을 구한다.
  4. 새로운 점수 평균을 구하고 출력한다.

코드

import java.util.*;

public class Main {
    public static void main(String[] args){
        //N을 입력받기, 길이가 N인 배열 선언
        //N만큼 반복하며 점수 입력받기, max 구하기
        //현재 점수/max*100 구하고 배열에 입력, sum 구하기
        //새로운 점수 평균 구하기
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        float[] arr = new float[N];
        float max = -1;
        float sum = 0;

        for(int i=0; i<N; i++) {
            arr[i] = sc.nextInt();
            if(max<arr[i])
                max = arr[i];
        }
        for(int i=0; i<N; i++) {
            arr[i] = (arr[i]/max)*100;
            sum += arr[i];
        }
        System.out.print(sum/N);
    }
}

Note

  • arr[], max, sum을 int형으로 선언하면 값이 틀리게 계산된다.
  • 정수형 변수 간의 나눗셈을 하면 소수점 이하를 버린 몫을 반환한다.
  • 만약 피연산자를 모두 정수형으로 선언하고 (40/80 * 100)을 연산하면 결과는 0이 된다.
  • 문제 출제 의도는 실수형(float)으로 선언한 변수간 나눗셈을 하고, 나머지(소수점 2자리)를 얻는 것이다.