1 minute read



문제 풀이


이번 문제는 단순한 구현 문제이다.


아이디어 도출

문제에서 요구한 절사평균 30%을 적용하여 높은 값에서부터 15%, 낮은 값에서부터 15%를 제외한 후의 평균을 구하면 된다.

또한, 절사평균을 통해 높은 값과 낮은 값에서부터 데이터를 제외해야 한다는 것을 통해 데이터를 정렬해두고 제외해야 한다는 것을 꼭 고려해야 한다.

위 사항만 잘 고려하고, 반올림만 잘 해주면 쉽게 풀 수 있다.


문제 풀이를 위해 작성한 코드는 아래와 같다.

작성코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
import java.io.*;
import java.util.*;

class Main {    

    public static void main(String[] args) throws IOException {
        
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int N = Integer.parseInt(br.readLine());
        
        // 절사평균을 구한다.
        int except = (int) Math.round((double) N * 15 / 100);

        // 입력 배열을 만든다.
        int[] arr = new int[N];
        for(int i=0; i<N; i++) {
            arr[i] = Integer.parseInt(br.readLine());
        }
        // 테스트케이스 예제 1을 보면 알겠지만 데이터가 오름차순 정렬되어 있어야 한다.
        Arrays.sort(arr);

        // 총 난이도의 평균을 구할 변수 초기화
        int result = 0;

        // 절사평균을 통해 제외할 구간만을 순회하여 합을 담는다.
        for(int i=except; i<N-except; i++) {
            result += arr[i];
        }
        
        // 절사평균을 제외한 나머지의 평균을 구해 반올림한다.
        result = (int) Math.round((double)result / (N - (except*2)));

        bw.write(result+"\n");

        bw.close();
        br.close();
    }    

}

출처


  • 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.