내 맴

[ 백준 ] 2108번 : 통계학 (파이썬) 본문

Algorithm/Baekjoon 문제풀이

[ 백준 ] 2108번 : 통계학 (파이썬)

뺙사우르수 2020. 5. 18. 17:34
728x90

문제 )

https://www.acmicpc.net/problem/2108

 

2108번: 통계학

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

www.acmicpc.net

 

 

[ 풀이 ]

산술평균, 중앙값, 범위를 구하는 방법은 매우 쉬웠다. 

최빈값을 구하기 위해서 Collections모듈의 Counter class를 이용해주었다.

 

< 구하는 법 >

우선, 입력한 N개의 숫자 list를 정렬해주고 시작 

산술평균 : list의 전체합을 N으로 나눠준 값이다. 소수점 이하 첫째 자리에서 반올림 해야하므로 round함수를 이용해준다. 
 중앙값 : list를 정렬했으므로 list의 중간 index에 있는 값을 찾아준다.
 최빈값 : 입력하는 수 N이 1개이면 그냥 출력하지만 여러개인 경우에는 2번째 작은 값을 출력해야한다. 
 범위 : 정렬된 list의 맨끝 값(최댓값)에서 맨 앞의 값(최솟값)을 빼준다

 

 

- python code 

from collections import Counter
import sys
input= sys.stdin.readline


def solve(num):
    num.sort()
    print(round(sum(num)/N)) # 산술평균
    print(num[N//2]) #중앙값
    # 최빈값
    if N==1:
        print(num[0])
    else:
        lot=Counter(num).most_common(2)
        if lot[0][1]==lot[1][1]:
            print(lot[1][0])
        else:
            print(lot[0][0])    
    print(num[N-1]-num[0])



N=int(input())
num=[]
for i in range(N):
    num.append(int(sys.stdin.readline()))

solve(num)

728x90