Algorithm

BOJ - 2108번 - 통계학

테니드2 2021. 4. 8. 00:32

www.acmicpc.net/problem/2108

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

코드:

from collections import Counter
import sys


def average(data):
    avg = sum(data) / len(data)
    return round(avg)


def mid_value(data):
    if len(data) == 1:
        return data[0]
    else:
        return data[len(data)//2]


def mode(data):
    if len(data) == 1:
        return data[0]
    counter = Counter(data).most_common()
    if counter[0][1] == counter[1][1]:
        return counter[1][0]
    else:
        return counter[0][0]


def scope(data):
    if len(data) == 1:
        return 0
    else:
        return data[len(data)-1] - data[0]



# 데이터 입력받기
N = int(sys.stdin.readline())
data = []

for _ in range(N):
    data.append(int(sys.stdin.readline()))

data = sorted(data)
# 산술평균
print(average(data))
# 중앙값
print(mid_value(data))
# 최빈값
print(mode(data))
# 범위
print(scope(data))