새소식

알고리즘 문제풀이/BOJ

[정렬, 반올림] 백준 18110번 solved.ac 자바(java) 풀이

  • -

BOJ 18110번 solved.ac 문제 자바(java) 풀이

문제 정리

  1. 난이도 의견은 문제를 푼 사람들이 생각한 난이도를 의미하는 정수 하나로 주어진다.
  2. 아직 아무 의견이 없다면 문제의 난이도는 0으로 결정한다.
  3. 의견이 하나 이상 있다면, 문제의 난이도는 모든 사람의 난이도 의견의 30%로 절사평균으로 결정한다.
  4. 절사평균: 극단적인 값들이 평균 값을 왜곡하는 것을 방지하기 위해 가장 큰 값들과 가장 작은 값들을 제외하고 평균을 구하는 것!
  5. 30% 절사 평균: 위에서 15%, 아래에서 15%를 제외하고 평균을 계산한다.
  6. 제외 되는 사람 수는 반올림 해서 결정한다.(25명인 경우 0.15를 곱하면 3.75가 나오는데 반올림하여 4명 절삭)
  7. 계산된 평균도 정수로 반올림된다. (절사 평균이 16.7이라면 난이도는 17)

문제 풀이

  1. 위, 아래에서 절사해야할 인원을 구합니다.
    n*0.15를 한 값에 반올림(round)를 한 만큼 절사합니다.
  2. 주어진 의견들을 오름차순으로 정렬합니다.(Arrays.sort)
  3. 합을 구합니다. 이때 합을 담을 변수는 double 형으로 선언합니다.
    왜냐하면 인원수로 나눌때 둘다 int형이면 결과가 int형으로 나오기 때문입니다.
  4. 합을 구한 의견 수는 n-num x 2 입니다. sum 에다가 이 수만큼 나눠주고 round를 취합니다. 그리고 출력합니다.

배열 정렬

그냥 일반 자료형을 담은 배열인 경우 Arrays.sort()를 이용하여 간단하게 정렬할 수 있습니다.

  1. 오름 차순 정렬: Arrays.sort(arr)
  2. 내림 차순 정렬: Arrays.sort(arr, Collections.reverseOrder());
    sort에 두 번째 인자로 comparator를 추가할 수 있습니다.
    comparator로 Collections.revserOrder()를 줌으로써 역순 즉, 내림차순으로 정렬할 수 있습니다.

반올림

Math.round 함수를 이용하여 반올림 할 수 있습니다.

  1. 정수형태로 반올림 : Math.round(num)
  2. 소수점 첫 번째 자리로 반올림: Math.round(num*10)/10.0
  3. 소수점 첫 번째 자리로 반올림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

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.