[ BOJ / Python ] 6986번 절사평균

황승환·2021년 12월 11일
0

Python

목록 보기
44/498

이번 문제는 문제에서 주어진 공식을 이용하여 절사평균과 보정평균을 소수점 셋째자리에서 반올림하여 출력하는 문제였다. 오답처리되어 찾아본 결과 절사평균과 보정평균을 프로그램으로 구하는 과정에서 0.00000001의 오차가 발생하기 때문에 이를 더해야 정답을 구할 수 있다는 사실을 알 수 있었다.

  • n과 k를 입력받는다.
  • 입력 받은 수들을 저장할 num배열을 선언한다.
  • 절사평균을 나타낼 변수 js와 보정평균을 나타낼 변수 bj를 0으로 정의한다.
  • 0부터 n까지의 i에 대한 for문을 돌린다.
    -> 수들을 입력받아 num배열에 넣는다.
  • num배열을 오름차순으로 정렬시킨다.
  • k부터 n-k까지의 i에 대한 for문을 돌린다.
    -> js에 num[i]를 더한다.
  • bj에 js값을 넣는다.
  • js를 (n-2*k)로 나눈다.
  • bj에 num[k]*k를 더하고 num[n-k-1]*k를 더한다.
  • bj를 n으로 나눈다.
  • js에 0.00000001을 더한 값을 소수점 둘째자리까지 출력한다.
  • bj에 0.00000001을 더한 값을 소수점 둘째자리까지 출력한다.

Code

n, k=map(int, input().split())
num=[]
js=0
bj=0
for i in range(n):
    num.append(float(input()))
num.sort()
for i in range(k, n-k):
    js+=num[i]
bj=js
js/=(n-2*k)
bj=bj+(num[k]*k)+(num[n-k-1]*k)
bj/=n
print('%.2f'%(js+0.00000001))
print('%.2f'%(bj+0.00000001))

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글