코딩테스트 & 문제 풀이
[Java]백준_18110 : solved.ac
Hicecream
2025. 4. 11. 15:02
https://www.acmicpc.net/problem/18110
문제 분석
배열에 입력 받은 값을 넣고, 정렬
배열 길이의 15% 만큼의 값을 앞뒤로 제외
나머지 중간 값들의 평균 구하기
소스 코드 (⭕)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
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[] arr = new int[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
double g = (double) (n * 15) / 100;
int gg = (int) (g + 0.5);
int sum = 0;
int cnt = 0;
for (int i = gg; i < n - gg; i++) {
sum += arr[i];
cnt++;
}
double result = (double) sum / cnt + 0.5;
System.out.println((int) result);
}
}
코드 분석
1. 배열의 길이 n을 입력 받고, 그 길이만큼의 값들도 배열에 넣어준다.
2. 극단값들을 제외해야 하기 때문에 배열을 정렬해준다.
3. 배열 길이의 15% 구하기 위해 n * (15 / 100)을 계산하여 변수 g에 넣어준다.
4. g 값을 반올림하기 위해 0.5를 더해주고 정수형으로 바꾸면 실제 몇 명을 제외할 지 구할 수 있다.
5. 앞뒤로 gg만큼의 값을을 제외한 배열의 값들의 합 sum과 길이 cnt를 구해준다.
6. 문제의 난이도를 출력하기 위해 합과 길이를 나눠누고 0.5를 더해서 int 형으로 바꾸면 반올림된 정수가 출력된다.
end
반올림에 대해서 특정 값을 더해서 구하는 방법에 꽂혔다...
함수도 따로 있던데 다음엔 함수를 이용해서 구해봐야 겠다.