[Java] 백준(실버-4) 18110번 - solved.ac
문제 풀이
이번 문제는 단순한 구현 문제이다.
아이디어 도출
문제에서 요구한 절사평균 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();
}
}
출처
- 해당 문제의 저작권은 문제를 만든이에게 있으며 자세한 내용은 문제 링크에서 참조바랍니다.