수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.
둘째 줄에는 중앙값을 출력한다.
셋째 줄에는 최빈값을 출력한다. 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.
넷째 줄에는 범위를 출력한다.
5
1
3
8
-2
2
2
2
1
10
1
4000
4000
4000
4000
0
5
-1
-2
-3
-1
-2
-2
-2
-1
2
import sys
input = sys.stdin.readline().strip
numbers = []
N = int(input())
for i in range(N):
numbers.append(int(sys.stdin.readline().strip()))
# 산술 평균
print(round(sum(numbers) / N))
# 중앙값
numbers.sort()
print(numbers[int(N / 2)])
# 최빈값
dic = {} # count에 용이한 dictionary
for number in numbers:
if number in dic: # 등록되어 있으면 value + 1
dic[number] += 1
else:
dic[number] = 1 # 없다면 등록
max_value = max(dic.values())
result = []
for number in set(numbers): # 중복 제거
if dic[number] == max_value:
result.append(number) # max value의 key 저장
result.sort()
if len(result) > 1:
print(result[1])
else:
print(result[0]) # 2개 이상 고려
# 범위
print(max(numbers)-min(numbers))
💡
import sys
loop = int(input())
vals = []
for _ in range(loop):
vals.append(int(sys.stdin.readline()))
vals.sort()
def average(vals):
return round(sum(vals)/len(vals))
def center(vals):
return vals[len(vals)//2]
def freq(vals):
import collections
tmp = collections.Counter(vals).most_common()
if len(tmp) > 1:
if tmp[0][1] == tmp[1][1]:
return tmp[1][0]
else:
return tmp[0][0]
else:
return tmp[0][0]
def range(vals):
return vals[len(vals)-1] - vals[0]
print(average(vals))
print(center(vals))
print(freq(vals))
print(range(vals))
💡import collections