[백준] 18110번 : solve.ac
🥈(실버 4)
🎯 25.947%
⏰ 걸린 시간 : 14분
- 알고리즘 유형 : [정렬]
📌 [포인트]
반올림 해주는 round의 경우 사사오입의 원칙을 따른다.
사사오입이란 ?
반올림할 자리의 수가 5이면 반올림 할 때 앞자리의 숫자가 짝수면 내림하고 홀수면 올림 한다.
때문에 반올림을 따로 구현해야한다.
✔️ [문제 요약]
0. 아직 아무 의견이 없다면 문제의 난이도는 0으로 결정한다.
1. 의견이 하나 이상 있다면, 문제의 난이도는 모든 사람의 난이도 의견의 30% 절사평균으로 결정한다.
2. 절사평균이란 극단적인 값들이 평균을 왜곡하는 것을 막기 위해 가장 큰 값들과 가장 작은 값들을 제외하고 평균을 내는 것을 말한다. 30% 절사평균의 경우 위에서 15%, 아래에서 15%를 각각 제외하고 평균을 계산한다.
3. 따라서 20명이 투표했다면, 가장 높은 난이도에 투표한 3명과 가장 낮은 난이도에 투표한 3명의 투표는 평균 계산에 반영하지 않는다는 것이다.
코드(code)
import sys import math input = sys.stdin.readline N = int(input()) if N == 0: print(0) else: opinions = [] for _ in range(N): difficulty = int(input()) opinions.append(difficulty) opinions.sort() trim = N*0.15 if trim - math.trunc(trim) < 0.5: trim = math.trunc(trim) else: trim = math.ceil(trim) sums = sum(opinions[0+trim:N-trim]) answer = sums / (N-2*trim) if answer - math.trunc(answer) < 0.5: answer = math.trunc(answer) else: answer = math.ceil(answer) print(answer)
사사오입 원칙에 대해서 살펴볼 필요가 있다.
- [해당 코드]