본문 바로가기

CodingTEST

[백준 18110] solved.ac (JAVA)

반응형

백준 18110번 문제 - solved.ac

 

18110번: solved.ac

5명의 15%는 0.75명으로, 이를 반올림하면 1명이다. 따라서 solved.ac는 가장 높은 난이도 의견과 가장 낮은 난이도 의견을 하나씩 제외하고, {5, 5, 7}에 대한 평균으로 문제 난이도를 결정한다.

www.acmicpc.net


문제 분석

 

  • 사용자들의 의견을 바탕으로 난이도를 결정하는 방식은 다음과 같다.
    • 아직 아무 의견이 없다면 문제의 난이도는 0으로 결정한다.
    • 의견이 하나 이상 있다면, 문제의 난이도는 모든 사람의 난이도 의견의 30% 절사평균으로 결정한다.
  • 절사평균 : 극단적인 값들이 평균을 왜곡하는 것을 막기 위해 가장 큰 값들과 가장 작은 값들을 제외하고 평균을 내는 것
    • 30% 절사평균 : 위에서 15%, 아래에서 15%를 각각 제외하고 평균
  • 제외되는 사람의 수는 위, 아래에서 각각 반올림한다. 
  • 계산된 평균도 정수로 반올림

 

해결 키 포인트

 

  •  
  • 정수 올림 : Math.ceil()
  • 정수 내림 : Math.floor()
  • 정수 반올림 : Math.round()
  • 소수점 반올림 : n.toFixed(k)
    • 숫자 n을 k번째 소수점까지 반올림
    • ex) (1.222).toFixed(1) = 1.2

코드

 

import java.io.*;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());

        int [] nums = new int[N];
        for (int i = 0; i < N; i++) {
            nums[i] = Integer.parseInt(br.readLine());
        }

        Arrays.sort(nums);

        int noContain = (int) Math.round(N*0.15);

        for (int i = 0; i < noContain; i++) {
            nums[i] = 0;
            nums[N-1-i] = 0;
        }

        int sum = Arrays.stream(nums).sum();
        N = N - (noContain*2);

        System.out.println((int) Math.round((double) sum / N));

    }
}
반응형