본문 바로가기

알고리즘 문제풀이(JAVA)

백준 P1546_평균

문제

세준이는 기말고사를 망쳤다. 세준이는 점수를 조작해서 집에 가져가기로 했다. 일단 세준이는 자기 점수 중에 최댓값을 골랐다. 이 값을 M이라고 한다. 그리고 나서 모든 점수를 점수/M*100으로 고쳤다.

예를 들어, 세준이의 최고점이 70이고, 수학점수가 50이었으면 수학점수는 50/70*100이 되어 71.43점이 된다.

세준이의 성적을 위의 방법대로 새로 계산했을 때, 새로운 평균을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 시험 본 과목의 개수 N이 주어진다. 이 값은 1000보다 작거나 같다. 둘째 줄에 세준이의 현재 성적이 주어진다. 이 값은 100보다 작거나 같은 음이 아닌 정수이고, 적어도 하나의 값은 0보다 크다.

출력

첫째 줄에 새로운 평균을 출력한다. 실제 정답과 출력값의 절대오차 또는 상대오차가 10-2 이하이면 정답이다.

 

package baekjoon;

import java.util.Scanner;

public class P1546 {
    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 = sum +A[i];
        }
        //한과목과 관련된 수식을 총합한 후 관련된 수식으로 변환해 로직이 간단해짐
        System.out.println(sum * 100.0/ max / N);
    }
}

 

풀이과정:

  1. 사용자로부터 과목의 수(N)를 입력 받는다.
  2. N개의 점수를 입력 받아 배열 A에 저장한다.
  3. 배열 A를 순회하면서 최댓값을 찾고, 동시에 모든 점수의 합을 계산한다.
  4. 새로운 평균을 구하기 위해 모든 점수의 합(sum)을 최댓값(max)으로 나누고, 그 결과를 N으로 나눈다.
  5. 최종적으로 계산된 평균을 출력한다.

느낀점: 이 문제를 해결하기 위해서는 간단한 수식을 사용하여 새로운 평균을 구할 수 있다. 최댓값을 찾으면서 동시에 모든 점수의 합을 구하는 방식을 통해 반복문을 한 번만 사용하여 문제를 해결할 수 있다. 문제를 정확히 이해하고 적절한 방법으로 해결하는 것이 중요하며, 간결하고 효율적인 코드를 작성하는 데에도 중요하다. 이러한 문제 해결 과정을 통해 프로그래밍 실력을 향상시킬 수 있다.