https://www.acmicpc.net/problem/23278
문제
스타트링크에는 영화 감상 동아리가 있다. 영화 동아리에는 총 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로 선언해야 한다.
'코딩테스트' 카테고리의 다른 글
[정렬] 백준 1931번 회의실 배정 java(자바) (0) | 2023.01.04 |
---|---|
[정렬] 백준 9076번 점수 집계 java(자바) (1) | 2023.01.03 |
[DFS,BFS] 백준 10451번 순열 사이클 java (0) | 2022.11.07 |
[DFS,BFS] 백준 1260번 DFS와 BFS (0) | 2022.11.07 |
[완전탐색] 프로그래머스 모의고사 (0) | 2022.11.06 |
댓글