https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
- 산술평균 : N개의 수들의 합을 N으로 나눈 값
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
from collections import Counter
import sys
m=int(sys.stdin.readline())
numbers=[]
for _ in range(m):
numbers.append(int(sys.stdin.readline()))
numbers.sort()
print(round(sum(numbers)/m))
print(numbers[m//2])
cnt = Counter(numbers).most_common() #빈도수 높은 순서로...
#[(-2, 2), (-1, 2), (-3, 1)] (값,빈도수)로 저장
if m==1:
print(numbers[0])
else:
if cnt[0][1]==cnt[1][1]:
print(cnt[1][0])
else:
print(cnt[0][0])
print(max(numbers)-min(numbers))
시간 단축을 위해 sys.stdin.readline()으로 입력받았다.
Counter 함수를 공부하게 되었다.
Counter(리스트).most_common()은 리스트의 모든 값이 (값,빈도수) 형태로 리스트로 정보가 저장된다.
빈도수가 높은 순서로 나열되기 때문에,
가장 앞의 빈도수와 그 뒤의 빈도수를 비교하여 같으면 두번째 값을 출력하였다.
cnt = Counter(numbers).most_common(2) 이면 빈도수 높은 2개 리스트 요소만 가져올 것이다.
'Algorithm > baekjoon' 카테고리의 다른 글
백준 2805 파이썬 : 나무자르기 / 1654 파이썬 : 랜선자르기 (이분탐색) (0) | 2022.10.13 |
---|---|
백준 1874 파이썬 : 스택 수열 (0) | 2022.10.06 |
JAVA : 백준 2562번 최댓값 (0) | 2022.06.12 |
JAVA : 백준 2475번 검증수 (BufferedReader, Scanner) (0) | 2022.06.12 |
JAVA : 2438번 별찍기-1 (0) | 2022.06.10 |