문제
Little Ivica received N math grades and wants to calculate their average. He knows that the average of two numbers a and b is calculated as (a + b) / 2, but he still doesn’t know how to do it for multiple numbers. He calculates the average by writing down N grades and repeating the following operations N - 1 times:
- He chooses two numbers and erases them.
- He writes down the average of the two chosen numbers.
After precisely N - 1 steps, the only number written down will be the one representing the average grade to Ivica. It is your task to determine the largest average that can be obtained this way.
입력
The first line of input contains the integer N (1 ≤ N ≤ 20), the number from the task.
The ith of the following N lines contains the integer Xi (1 ≤ Xi ≤ 5), the ith grade.
출력
Output the largest possible average from the task. Your solution is allowed to deviate from the official one for 0.000001.
예제 입력 1 복사
4
2
4
5
2
예제 출력 1 복사
4.000000
예제 입력 2 복사
3
5
5
4
예제 출력 2 복사
4.750000
예제 입력 3 복사
3
1
3
5
예제 출력 3 복사
3.500000
힌트
Clarification of the third test case:
Initially, the numbers 1, 3 and 5 are written down.
In the first step, Ivica chooses numbers 1 and 3, erases them and writes down 2. After the first step, 2 and 5 are written down.
In the second step, Ivica chooses the remaining two numbers which average is 3.5.
# https://www.acmicpc.net/problem/15577
'''
1. 아이디어 :
1) 힙으로 정렬하여 출력
2. 시간복잡도 :
1) O(n) + O(k) * O(logn) = O(n)
입력받는 횟수 + heapify 정렬 * Heappush, Heappoop
3. 자료구조 :
1) 힙
'''
import heapq
import sys
input = sys.stdin.readline
n = int(input())
math_scores =[int(input()) for x in range(n)]
heapq.heapify(math_scores)
ans = heapq.heappop(math_scores)
for i in range(n-1):
ans = (ans + heapq.heappop(math_scores))/2
print("{:.6f}".format(ans))
'알고리즘 문제 > 백준' 카테고리의 다른 글
순회강연 #2109 (0) | 2023.02.05 |
---|---|
절댓값 힙 #11286 (0) | 2023.02.05 |
30번 #13116 (0) | 2023.01.27 |
완전 이진 트리 #9934 (0) | 2023.01.27 |
이진 검색 트리 #5639 (0) | 2023.01.26 |