본문 바로가기

백준

[백준] 2108번 - 통계학 (파이썬 풀이) (feat. collections, sys)

반응형

1. 문제

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

수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.

  1. 산술평균 : N개의 수들의 합을 N으로 나눈 값
  2. 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
  3. 최빈값 : N개의 수들 중 가장 많이 나타나는 값
  4. 범위 : N개의 수들 중 최댓값과 최솟값의 차이

N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.

(시간 초과 때문에 왕왕 고생한 이번문제,,,,,)

 

2. 코드

from collections import Counter
import sys

n = int(input())
l = []

for i in range(n):
    l.append(int(sys.stdin.readline()))
l.sort()

cnt = Counter(l).most_common()

print(round(sum(l)/len(l)))
print(l[len(l)//2])

if len(l) > 1:
    if cnt[0][1] == cnt[1][1]:
        print(cnt[1][0])
    else:
        print(cnt[0][0])
else:
    print(cnt[0][0])
print(l[-1]-l[0])

 

3. 주요 포인트

1) input()대신 sys.stdin.readline() 사용해서 시간 줄이기

2) 최빈값 구할 때 하나하나 구하면 백퍼센트 시간 초과 뜬다. Counter의 most_common 사용하기,.,,,

728x90
반응형