BOJ 18110번 solved.ac 문제 자바(java) 풀이
문제 정리
- 난이도 의견은 문제를 푼 사람들이 생각한 난이도를 의미하는 정수 하나로 주어진다.
- 아직 아무 의견이 없다면 문제의 난이도는 0으로 결정한다.
- 의견이 하나 이상 있다면, 문제의 난이도는 모든 사람의 난이도 의견의 30%로 절사평균으로 결정한다.
- 절사평균: 극단적인 값들이 평균 값을 왜곡하는 것을 방지하기 위해 가장 큰 값들과 가장 작은 값들을 제외하고 평균을 구하는 것!
- 30% 절사 평균: 위에서 15%, 아래에서 15%를 제외하고 평균을 계산한다.
- 제외 되는 사람 수는 반올림 해서 결정한다.(25명인 경우 0.15를 곱하면 3.75가 나오는데 반올림하여 4명 절삭)
- 계산된 평균도 정수로 반올림된다. (절사 평균이 16.7이라면 난이도는 17)
문제 풀이
- 위, 아래에서 절사해야할 인원을 구합니다.
n*0.15를 한 값에 반올림(round)를 한 만큼 절사합니다.
- 주어진 의견들을 오름차순으로 정렬합니다.(Arrays.sort)
- 합을 구합니다. 이때 합을 담을 변수는 double 형으로 선언합니다.
왜냐하면 인원수로 나눌때 둘다 int형이면 결과가 int형으로 나오기 때문입니다.
- 합을 구한 의견 수는 n-num x 2 입니다. sum 에다가 이 수만큼 나눠주고 round를 취합니다. 그리고 출력합니다.
배열 정렬
그냥 일반 자료형을 담은 배열인 경우 Arrays.sort()를 이용하여 간단하게 정렬할 수 있습니다.
- 오름 차순 정렬: Arrays.sort(arr)
- 내림 차순 정렬: Arrays.sort(arr, Collections.reverseOrder());
sort에 두 번째 인자로 comparator를 추가할 수 있습니다.
comparator로 Collections.revserOrder()를 줌으로써 역순 즉, 내림차순으로 정렬할 수 있습니다.
반올림
Math.round 함수를 이용하여 반올림 할 수 있습니다.
- 정수형태로 반올림 : Math.round(num)
- 소수점 첫 번째 자리로 반올림: Math.round(num*10)/10.0
- 소수점 첫 번째 자리로 반올림2: String.format() 이용
double num = 34.000
System.out.println(String.format("%.1f", num))
// 34.00 출력
소수점의 0들 까지 모두 출력하고 싶다면 String.format을 이용해야 합니다. 그렇지 않다면 Math.round를 이용하면 됩니다.
백준 18110번 solved.ac 자바(java) 코드
https://github.com/wlgh325/BOJ_answer/blob/master/%EC%8B%A4%EB%B2%84/18110(solved.ac)/Main.java