백준 2108번: 통계학

ddongseop·2021년 6월 30일
0

Problem Solving

목록 보기
6/49


✔ 풀이를 위한 아이디어

  • collections 모듈의 Counter 클래스 활용

✔ 코드

import sys
from collections import Counter

N = int(sys.stdin.readline())
nums = [int(sys.stdin.readline()) for _ in range(N)]
nums = sorted(nums)

#산술평균 출력
mean = int(round(sum(nums)/N, 0))
print(mean)

#중앙값 출력
mid = N//2
print(nums[mid])

#최빈값 출력
tmp = Counter(nums)
tmp2 = tmp.most_common()

maximum = tmp2[0][1]
maximums = []

for n in tmp2:
    if n[1] == maximum:
        maximums.append(n[0])

if len(maximums) > 1:
    maximums = sorted(maximums)
    print(maximums[1])
else:
    print(maximums[0])

#범위 출력
interval = nums[N-1] - nums[0]
print(interval)
  • 최빈값을 구하는 것 외에는 매우 쉬운 난이도의 문제였다.
  • for문을 활용해 최빈값을 구할 수도 있지만, 좀 더 효율적인 모듈이 없을까 하여 찾아보니 위와 같은 방법이 있었다.
  • Counter()은 데이터가 등장한 횟수를 사전 형식으로 반환하는 함수이고, most_common() 메소드는 등장한 횟수를 내림차순으로 정리해준다.

✔ 관련 개념

0개의 댓글