[백준 2108번-파이썬/Python] 통계학
알고리즘 공부/BOJ백준 풀이

[백준 2108번-파이썬/Python] 통계학

http://acmicpc.net/problem/2108

{코드}

import sys
from collections import Counter

def input():
    return int(sys.stdin.readline())
def print(v):
    sys.stdout.write(str(v)+'\n')

n = input()
data = sorted([input() for _ in range(n)])

print(round(sum(data) / n)) # 평균
print(data[n // 2]) # 중앙값
# 최빈값
count = Counter(data).most_common() 
if len(count) > 1 and count[0][1] == count[1][1]:
    print(count[1][0])
else:
    print(count[0][0])
    
print(data[-1] - data[0]) # 범위

{설명}

평균, 중앙값, 범위는 따로 설명하지 않겠습니다.

최빈값은 등장한 횟수를 통해서 구하기 때문에 Counter라는 클래스를 사용하여 각 숫자가 몇 번 등장했는지 파악한다.

(Counter는 정렬되지 않은 상태이므로 most_common을 통해 정렬된 리스트를 반환합니다.)

most_common을 통해 반환된 결과는 (수, 횟수)의 형태를 띠기 때문에 만약 첫번째와 두 번째가 같은 횟수를 가진다면 두 번째 값을 출력하고 아니라면 첫 번째 값이 가장 많이 나타난 수이므로 이를 출력한다.

여기서 쓰는 Counter는 set을 통해서도 같은 효과를 만들어낼 수 있으나 시간초과가 나게 된다.

(대부분의 경우 라이브러리는 더 빠른 속도를 낸다고 생각하면 된다.)