[백준 18110번] solved.ac with Java

guswls·2024년 5월 5일
0

알고리즘

목록 보기
19/39
post-custom-banner

문제


https://www.acmicpc.net/problem/18110



코드


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

class Main {
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());

		List<Integer> list = new ArrayList<>();
		for (int i = 0; i < N; i++) {
			list.add(Integer.parseInt(br.readLine()));
		}

		Collections.sort(list);

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

		int sum = 0;
		for (int i = delete; i < N - delete; i++) {			
			sum += list.get(i);
		}

		
		double avg = (double) sum / (N - (delete * 2));
		System.out.println(Math.round(avg));
	}
}


문제 이해


  • 절사 평균을 구하면 된다.
  • 수치를 정렬한 후에 상위 15%의 데이터와 하위 15%의 데이터를 버리고 중간 데이터들의 평균을 구하면 된다.


풀이 방법


  • 문제 그대로 구현하면 된다.
  • 입력 값들을 정렬한 다음에 자를 부분을 구한다.
  • 자를 부분을 제외한 나머지 값들에 대해서 평균을 구하고, 반올림 시키면 된다.


핵심 포인트


  • Math.round함수를 통해 반올림을 하기 전에 반드시 강제 형변환을 해주어야 한다.
  • /연산을 수행한 후에 int형을 그대로 사용하면 소수점 이하의 숫자가 버려지기 때문에, 반드시 강제 형변환 후에 반올림을 수행해야 한다.


보완할 점 / 느낀 점


  • 문제 그대로 수식으로 구현하면 되기 때문에 어려운 문제는 아니다.


참고자료


profile
안녕하세요
post-custom-banner

0개의 댓글