본문 바로가기
백준 알고리즘

파이썬) 백준 알고리즘 | 2108번 : 통계학

by 코딩새내기_ 2022. 1. 19.

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

 

2108번: 통계학

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

www.acmicpc.net

문제

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

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

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

 

백준 2108 통계학 문제입니다.

파이썬에서는 sort함수가 있어서 편하게 구현할 수 있었습니다.

사실 아직 실버 난이도는 어렵게 푸는 것 같습니다.

import sys
from collections import Counter

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

numbers.sort()

cnt = Counter(numbers).most_common()
print(cnt)
average = round(sum(numbers) / len(numbers))
median = numbers[len(numbers)//2]
if len(numbers) > 1:
	if cnt[0][1] == cnt[1][1]:
		mode = cnt[1][0]
	else:
		mode = cnt[0][0]
else:
	mode = cnt[0][0]

range_ = max(numbers) - min(numbers)

print(average)
print( median)
print(mode)
print(range_ )

아래 코드에서 numbers를 정렬하기까지만 하면

import sys
from collections import Counter

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

numbers.sort()

산술평균, 중앙값, 범위는 간단하게 구현할 수 있습니다.

최빈값의 경우에는 Counter를 이용하여 구현하였는데

문제풀면서 지금 실력으로는 이런 모듈없이는 불가능하다고 느꼈습니다.

댓글