[Python] 백준 #2108. 통계학
Tistory 첫 글을 써봅니다. 지금 하는 수준은 그리 높지 않아, 훗날 좀 어렵고 새로운 개념들이 나오면 다시 쓰려고 했는데 이렇게 쓰게 됐네요.
https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
# 2108 - Python3
import sys
input = sys.stdin.readline
from collections import Counter # 최빈값 구하는 함수에 필요한 collections 모듈의 counter class
def modefinder(numbers): # 최빈값 구하는 함수
data_dic = Counter(numbers)
order = data_dic.most_common()
maximum = order[0][1]
mode_list = []
for num in order:
if num[1] == maximum:
mode_list.append(num[0])
return mode_list
n = int(input())
arr = []
for _ in range(n):
arr.append(int(input()))
arr.sort() # arr를 내림차순 정리
sum = 0
for i in range(n):
sum += arr[i]
print("%.f" % round(sum/n)) # round function 사사오입 규칙 주의
print(arr[n//2]) # 중앙값
if len(modefinder(arr)) > 1: # 최빈값
print(modefinder(arr)[1])
else:
print(modefinder(arr)[0])
print(arr[n-1]-arr[0]) # 범위
< line 5 >
- from collections import Counter
: 밑의 modefinder 함수에서 Counter라는 객체를 사용하기에 선언. 여기서 Counter는 list or tuple에서 각 data의 등장횟수를 dictionary 형태로 반환
< line 8 >
- data_dic = Counter(numbers)
: Counter를 사용하여 각 숫자의 입력 횟수를 dictionary형태로 정리하여 data_dic에 저장
< line 9 >
- order = data_dic.most_common()
: most_common()을 이용하여 최빈값과 그 입력 횟수를 order에 저장
< line 10 >
- maximum = order[0][1]
: maximum에 최빈값의 입력 횟수 저장
< line 25 >
- arr.sort()
: 입력받은 arr를 오름차순으로 정렬
< line 32 >
- round()
: 반올림 시 사용
ex) round(num, t): num을 t번 째 자리에서 반올림