minimimi
[백준] 2108 통계학 본문
반응형
문제출처] https://www.acmicpc.net/problem/2108
문제요약
산술평균, 중앙값, 최빈값, 범위를 구하는 문제
풀이
산술평균
소수점 이하 첫 째 자리에서 반올림하기 위해 round() 를 이용한다.
average = int(round((sum(datas)/n)))
round(number,n)은 소수점 n번 째 자리까지 반올림을 수행한다.
중앙값
데이터를 정렬한 후 데이터의 길이 ÷ 2 를 인덱스로 하는 값을 갖는다.
datas.sort()
center = datas[n//2]
최빈값
### 최빈값 ###
# Counter(iterable)는
# iterable의 요소의 개수를 딕셔너리로 저장하는 Counter class 반환
mode_dict = Counter(datas)
# mode_dict.most_common()는
# 딕셔너리의 value값을 기준으로 오름차순 정렬
# list로 반환
modes = mode_dict.most_common()
key = modes[0][1]
d = []
i = 0
# 배열을 빈도수도 정렬하여 빈도수의 최대값보다 작아지면
# while문을 벗어난다.
while(i != len(modes) and (modes[i][1] == key)):
d.append(modes[i][0])
i += 1
d.sort()
if len(d)==1:
print(d[0])
else:
print(d[1])
범위
데이터의 최대값에서 최소값을 빼주면 범위가 나온다.
### 범위 ###
length = max(datas) - min(datas)
print(length)
소스코드는 Python 3으로 작성되었습니다.
import sys
from collections import Counter
input = sys.stdin.readline
datas = []
n = int(input())
for i in range(n):
datas.append(int(input()))
### 산술평균 ###
average = int(round((sum(datas)/n)))
print(average)
### 중앙값 ###
datas.sort()
center = datas[n//2]
print(center)
### 최빈값 ###
# Counter(iterable)는
# iterable의 요소의 개수를 딕셔너리로 저장하는 Counter class 반환
mode_dict = Counter(datas)
# mode_dict.most_common()는
# 딕셔너리의 value값을 기준으로 오름차순 정렬
# list로 반환
modes = mode_dict.most_common()
key = modes[0][1]
d = []
i = 0
# 배열을 빈도수도 정렬하여 빈도수의 최대값보다 작아지면
# while문을 벗어난다.
while(i != len(modes) and (modes[i][1] == key)):
d.append(modes[i][0])
i += 1
d.sort()
if len(d)==1:
print(d[0])
else:
print(d[1])
### 범위 ###
length = max(datas) - min(datas)
print(length)
반응형
'프로그래밍 공부 > 알고리즘' 카테고리의 다른 글
[백준] 18870 좌표 압축 (0) | 2021.09.23 |
---|---|
[백준] 15649 N과 M (1) (0) | 2021.09.21 |
[백준] 10989 수 정렬하기 3 (0) | 2021.09.19 |
[백준] 9020 골드바흐의 추측 (0) | 2021.09.18 |
[백준] 11724 연결 요소의 개수 (0) | 2021.09.17 |