https://www.acmicpc.net/problem/6986
절사평균과 보정평균을 구하는 방법은 쉬운데
float를 사용한다는 점을 유의해야한다.
첫 시도에는 round()로 단순하게 반올림을 했다가 실패했는데 테스트케이스 답이 다 맞아도 틀리는 이유가 부동소수점 밖에 없겠다는 생각이 들었다
float를 다루어 나누기 때문에 정수로 먼저 숫자를 바꾸어 (10이상의 수를 곱해주기) 계산해주고 마지막에 다시 그 숫자로 나누어준다. (C언어든 파이썬이든 나눗셈을 하면 정수 몫만 돌려주기 때문이다.)
부동소수점의 구조는 float가
부호가 1비트, 지수가 8비트, 그리고 더 작은 숫자를 나타내려면 가수부분까지 23비트를 사용한다.
부동소수점의 오차를 해결해주기 위해 지수 부분 2^-7만큼 더해주면 된다.
파이썬 코드
#6896 절사평균
import sys
input = sys.stdin.readline
N, K = map(int, input().split())
score = []
for _ in range(N):
score.append(float(input())*10)
score = sorted(score)[K:N-K]
jp=0
for i in score:
jp+=i
jp = jp/(N-2*K)/10
#jp = round(jp, 2)
bp=0
for i in score:
bp+=i
bp = bp + score[0]*K + score[-1]*K
bp = bp/N/10
#bp = round(bp, 2)
print("{:.2f}\n{:.2f}".format(jp + 0.00000001, bp + 0.00000001))
'알고리즘 > 백준(BOJ)' 카테고리의 다른 글
[백준/알고리즘] #1448: 삼각형 만들기 [파이썬(python)/수학] (0) | 2021.09.29 |
---|---|
[백준/알고리즘]#2659: 십자카드 문제 [파이썬(python)/구현] (0) | 2021.09.29 |
[백준/알고리즘]#11652: 카드 [파이썬(python)] (0) | 2021.09.27 |
[백준/알고리즘]#2331: 반복수열 [파이썬(python)/수학] (0) | 2021.09.27 |
[백준/알고리즘]#1051: 숫자 정사각형 [파이썬(python)/브루트포스] (0) | 2021.09.27 |