728x90
반응형
https://www.acmicpc.net/problem/6986
6986번: 절사평균
첫째 줄에 절사평균(N, K)를, 둘째 줄에 보정평균(N, K)를 각각 소수점이하 셋째 자리에서 반올림하여 둘째 자리까지 출력한다. 예를 들어 결과값이 9.667인 경우 9.67로, 5인 경우 5.00으로, 5.5인 경우
www.acmicpc.net
문제 해결
- 우선 풀의 과정 순서는 어렵지 않다.
- 리스트를 만들어서 절사평균은 앞에 k개, 뒤에 k개를 빼고 평균을 구하고, 보정평균은 앞에 k개, 뒤에 k개를 각각 k, -k-1 인덱스 값으로 변환시키고 평균을 구하면 된다.
- 하지만 93%쯤에서 계속 오답이 나오는데 이유가 파이썬 나누기를 하는 과정중에 소수점 일부 계산이 손실되어 잘못 답이 나올 수 있다고 한다. 그래서 아주 작은 수를 더해줘서 그 손실을 막는다고 한다. (사실 생각하지 못했고 어려웠다.)
CODE
import sys
input = sys.stdin.readline
import copy
if __name__ == "__main__":
n, k = map(int, input().split())
S = sorted([float(input()) for _ in range(n)])
t = sum(S[k:n-k])/(n-2*k)
if k ==0:
print(f"{t:.2f}")
print(f"{t:.2f}")
exit()
C = sorted(copy.deepcopy(S))
for i in range(k):
C[i] = C[k]
C[-i-1] = C[-k-1]
b = sum(C)/n
t += 0.00000001
b += 0.00000001
print(f"{t:.2f}")
print(f"{b:.2f}")
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 2150 Strongly Connected Component (0) | 2024.05.09 |
---|---|
[python] 백준 2635 수 이어가기 (0) | 2024.04.18 |
[python] 백준 14582 오늘도 졌다 (0) | 2024.04.14 |
[python] 백준 2643 색종이 올려 놓기 (0) | 2024.04.08 |
[python] 백준 1507 궁금한 민호 (0) | 2024.04.06 |
댓글