코딩테스트/백준
[Python] 백준 2108번. 통계학
jungmin.park
2023. 12. 19. 10:04
https://www.acmicpc.net/problem/2108
문제설명
- 산술평균 : N개의 수들의 합을 N으로 나눈 값
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이
풀이설계
- 산술형은 sum / 반올림은 round
- 중앙값은 배열의 중앙값 // 2
- 최빈값
- 배열의 길이가 1 이하인 경우 0번째 값 출력
- 배열의 길이가 1 초과인 경우 Counter 최빈값을 계산한뒤 역순으로 정렬해서
- 첫번째값과 0번째 value 값을 비교해서 값이 같다면 첫번째 값을 출력
- 그렇지않다면 0번째 값을 출력한다.
- 범위 0번째와 가장 끝에 있는 값의 차이를 계산
import sys
from collections import Counter
input=sys.stdin.readline
n = int(input())
nums = [int(input()) for _ in range(n)]
nums.sort()
print(round(sum(nums) / n)) # 산술평
print(nums[(len(nums)) // 2])
if len(nums) <= 1:
print(nums[0])
else:
cnts = sorted(Counter(nums).items(), key=lambda x: x[1], reverse=True)
if cnts[0][1] == cnts[1][1]:
print(cnts[1][0])
else:
print(cnts[0][0])
print(nums[n-1] - nums[0])