728x90
https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
네가지 기본 통계값을 구하는 문제(평균,중앙값,최빈값,범위)
# 2108번 문제 : 통계학
# 산술평균, 중앙값, 최빈값, 범위 n개의 수가 주어졌을때 이 네가지 기본 통계값을 구하는 문제
import sys
from collections import Counter
n=int(sys.stdin.readline()) # input()은 시간초과여서 sys를 활용
answer=[]
for i in range(n):
x=int(sys.stdin.readline()) # 배열에 담는다
answer.append(x)
answer.sort() # 정렬
bean_s = Counter(answer).most_common() # 최빈값을 구하기위한 Counter활용 빈도수를 튜플형식으로 반환
print(round(sum(answer) / n)) # 평균
print(answer[n // 2]) # 중앙값
if len(bean_s) > 1: # 최빈값이 2개 이상일시 뒤에것과 비교해서 출력
if bean_s[0][1] == bean_s[1][1]:
print(bean_s[1][0])
else:
print(bean_s[0][0])
else:
print(bean_s[0][0])
print(answer[-1] - answer[0]) # 범위 인덱스-1은 마지막값
문제에 수의 갯수 최대치가 50만까지 되서 input()은 시간초과를 발생시켜서 sys.stdin.readline()을 사용해주었다
Counter().most_common()은 튜플을 담은 list형식으로 반환하기 때문에 최빈값을 검사할때 bean_s[][]형식으로 사용했다
[(1,2),(2,3)]형식으로 반환하면 bean_s[0][1]은 2를 나타내는 형식이다
최빈값때문에 많은 시간을 투자한거같고 sys.stdin.readline()와 input()형식의 차이점 또한 알수있었다
728x90
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
| 백준의 알고리즘 1181번 문제(python) (0) | 2021.07.15 |
|---|---|
| 백준의 알고리즘 11650번 문제(python) (0) | 2021.07.13 |
| 백준의 알고리즘 1427번 문제(python) (0) | 2021.07.11 |
| 백준의 알고리즘 10818, 2562번 문제(python) (0) | 2021.07.10 |
| 백준의 알고리즘 2750번 문제(python) (0) | 2021.07.09 |