본문 바로가기
코딩테스트

[정렬] 백준 23278번 영화 평가 java(자바)

by Enhydra lutris 2023. 1. 2.

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

 

23278번: 영화 평가

스타트링크에는 영화 감상 동아리가 있다. 영화 동아리에는 총 N명의 구성원이 있고, 매주 모여서 영화 한 편을 본다. 영화를 본 뒤, 각 사람은 0보다 크거나 같고, 100보다 작거나 같은 정수로 영

www.acmicpc.net

문제

스타트링크에는 영화 감상 동아리가 있다. 영화 동아리에는 총 N명의 구성원이 있고, 매주 모여서 영화 한 편을 본다. 영화를 본 뒤, 각 사람은 0보다 크거나 같고, 100보다 작거나 같은 정수로 영화를 평가한다. 모든 구성원이 영화 평가를 마치면 동아리장은 최종 점수를 계산한다.

최종 평점은 가장 낮은 평가 L개와 가장 높은 평가 H개를 뺀 나머지 점수의 평균이다.

영화 감상 동아리의 각 회원이 남긴 평가가 입력으로 주어졌을 때, 최종 점수를 계산해보자.

입력

스타트링크에는 영화 감상 동아리가 있다. 영화 동아리에는 총 N명의 구성원이 있고, 매주 모여서 영화 한 편을 본다. 영화를 본 뒤, 각 사람은 0보다 크거나 같고, 100보다 작거나 같은 정수로 영화를 평가한다. 모든 구성원이 영화 평가를 마치면 동아리장은 최종 점수를 계산한다.

최종 평점은 가장 낮은 평가 L개와 가장 높은 평가 H개를 뺀 나머지 점수의 평균이다.

영화 감상 동아리의 각 회원이 남긴 평가가 입력으로 주어졌을 때, 최종 점수를 계산해보자.

출력

첫째 줄에 최종 점수를 출력한다. 절대/상대 오차는 10-9까지 허용한다.

코드

package BaekJoon.Sort;
import java.util.*;

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

        int N = sc.nextInt(); //총 구성원
        int L = sc.nextInt(); //제외할 가장 낮은 평가 개수
        int H = sc.nextInt(); //제외할 가장 높은 평가 개수
        int[] arr = new int[N];
        double result = 0;

        for(int i = 0; i < N; i++){
            arr[i] = sc.nextInt();
        }

        Arrays.sort(arr); // 정렬

        for(int i = L; i < N-H; i++){
            result += arr[i];
        } //가장 낮은 L개와 가장 높은 H개 제외 하고 더하기

        result = result/(N-L-H); // 평균 구하기
        System.out.println(result);
    }
}

풀이

1. 점수를 입력받은  배열을 정렬한다.

2. for문을 이용하여 가장 낮은 L개의 점수와 가장 높은 H개의 점수를 제외하고 더한다.

3. 더 한 점수에서 (N-L-H) 값을 나누어 평균을 구한다.

주의사항

'첫째 줄에 최종 점수를 출력한다. 절대/상대 오차는 10-9까지 허용한다.' 라는 출력 조건이 있기 때문에

출력되는 값이 최소 소수점 9자리를 넘어야 한다.

예를 들어 실제 답이 0.1111111111111인데 출력이 0.1111이라면 둘의 오차가 0.0000111111111가 만큼 생기고 이 오차는 10^(-9)보다 크기 때문에 오답이 되는 것이다.

따라서, 자바에서 기본적으로 float는 7자리, double은 16자리 까지 표현 되기 때문에

result를 float가 아닌 double로 선언해야 한다.

 

댓글