공부 기록장
백준 2108. 통계학 본문
문제 설명
N(홀수)개의 수가 주어졌을 때, 아래의 통계값들을 구하기
1. 산술평균 : N개의 수들의 합을 N으로 나눈 값
2. 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
3. 최빈값 : N개의 수들 중 가장 많이 나타나는 값
4. 범위 : N개의 수들 중 최댓값과 최솟값의 차이
입력
첫째 줄에 수의 개수 N( 1 ≤ N ≤ 500,000 )이 주어지고, N은 홀수이다
그 이후 N개의 줄에 정수들이 주어진다.
입력되는 정수의 절댓값은 4,000을 넘지 않는다.
출력
산술평균은 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.
최빈값은 여러 개 있을 경우 두 번째로 작은 값을 출력한다.
코드
from collections import Counter
import sys
n = int(sys.stdin.readline())
num = []
for i in range(n):
num.append(int(sys.stdin.readline()))
num.sort()
# 1. 산술평균
print(round(sum(num)/n))
#2. 중앙값
print(num[len(num)//2])
#3. 최빈값
tmp = Counter(num).most_common(2) # 최빈값 상위 2개 출력
# print(tmp)
if len(tmp) > 1:
if tmp[0][1] == tmp[1][1]:
print(tmp[1][0])
else:
print(tmp[0][0])
else:
print(tmp[0][0])
# 4. 범위
print(num[len(num)-1] - num[0])
가장 까다로운 부분은 최빈값을 구하는 부분이었다.
collections 라이브러리의 Counter를 활용하면 쉽게 구할 수 있다.
Counter의 most_common(n) 함수는 n번째 최빈값까지 구해주는데
튜플을 원소로 갖는 리스트로 반환을 해준다.
num = [3,3,3,2,2,1]
print(Counter(num).most_common(2)) # [(3, 3), (2, 2)]
또한, 산술평균을 구할 때
round 함수를 활용해서 원하는 자리 수에서 반올림을 할 수 있다.
두 번째 인자를 적지 않으면, 첫 번째 자리에서 반올림하여 정수를 반환한다.
'코딩 테스트 > 백준 문제 풀이' 카테고리의 다른 글
[백준 - Python] 2217. 로프 (그리디) (1) | 2024.01.03 |
---|---|
[백준 - Python] 2839. 설탕배달 (그리디) (1) | 2024.01.03 |
백준 1966. 프린터 (0) | 2023.12.31 |
백준 1158. 요세푸스 문제 (0) | 2023.12.31 |
백준 10866. 덱 (0) | 2023.12.31 |