백준

[백준] 1546 평균

Raming 2025. 2. 13. 20:10

- 문제 이해

  • 세준이는 시험 점수를 조작하려고 한다.
  • 최고 점수 M을 기준으로 모든 점수를 새로운 점수 = (현재 점수 / M) * 100 으로 변환한다.
  • 변환된 점수들의 새로운 평균을 구하는 문제이다.

 

- 틀린 코드

package CLASS2;

import java.util.Scanner;

public class 평균 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int grade[] = new int[n];

        int max = 0;
        int avg = 0;

        for(int i = 0; i < n; i++) {
            grade[i] = sc.nextInt();

            if (grade[i] > max) {
                max = grade[i];
            }
        }

        for(int i = 0; i < n; i++) {
            if (grade[i] < max) {
                grade[i] = grade[i] / max * 100;
            }
        }

        for(int i = 0; i < n; i++) {
            avg = grade[i];
        }

        System.out.println(avg);

    }
}

 

1. 평균 구하는 방식이 잘못되었다..^^

  • AVG = GRADE[I]; -> 배열의 마지막 값만 저장되었다. (평균 x)
  • 해결 방법: sum을 따로 구한 후 sum / n을 출력해야 한다.

2. 새 점수 계산 방식에 오류가 있다.

  • grade[i] = grade[i] / max * 100; -> int / int 연산이라 소수점이 사라진다.
  • 해결 방법: double을 사용하여 grade[i[ * 100.0 / max로 연산해야 한다.

 

- 올바른 코드

package CLASS2;

import java.util.Scanner;

public class 평균 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt(); // 과목 개수 입력
        int[] grade = new int[n]; // 점수 저장 배열

        int max = 0; // 최고 점수 저장 변수
        double sum = 0; // 새로운 점수 합계

        for (int i = 0; i < n; i++) {
            grade[i] = sc.nextInt(); // 점수 입력
            if (grade[i] > max) {
                max = grade[i]; // 최고 점수 찾기
            }
        }

        for (int i = 0; i < n; i++) {
            sum += (grade[i] * 100.0 / max); // 점수 변환 후 합계 계산
        }

        System.out.println(sum / n); // 새로운 평균 출력
        sc.close();
    }
}
 
- 수정된 부분
  • 최댓값 찾기 (max): if (grade[i] > max) { max = grade[i]; } -> 최고 점수 저장 
  • 새로운 점수 계산 시 double 사용: grade[i] * 100.0 / max실수 연산으로 소수점 유지.
  • 평균을 구할 때 sum / n 사용: 평균을 구하려면 반드시 sum 누적해서 더해야 한다.