728x90

(1) 문제

  • 수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
    • 산술평균 : N개의 수들의 합을 N으로 나눈 값
    • 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
    • 최빈값 : N개의 수들 중 가장 많이 나타나는 값
    • 범위 : N개의 수들 중 최댓값과 최솟값의 차이
  • N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.

 


(2) 입력

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

 


(3) 출력

  • 첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.
  • 둘째 줄에는 중앙값을 출력한다.
  • 셋째 줄에는 최빈값을 출력한다. 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.
  • 넷째 줄에는 범위를 출력한다.

(4) 예제 입력 및 출력


(5) 코드

import math
import sys

length = int(sys.stdin.readline())

value_dictionary = {

}

value_list = []

for i in range(length):
    value = int(sys.stdin.readline())
    if value in value_dictionary:
        value_dictionary[value] += 1
    else:
        value_dictionary[value] = 1
    value_list.append(value)
    

sum_number = 0
max_frequency_list = []
max_frequency = 0

for number in value_dictionary:
    #덧셈 구하기
    sum_number += number * value_dictionary[number]
    
    #최빈값 구하기
    if max_frequency < value_dictionary[number]:
        max_frequency_list.clear()
        max_frequency = value_dictionary[number]
        max_frequency_list.append(number)

    elif max_frequency == value_dictionary[number]:
        max_frequency_list.append(number)
        
value_list.sort()
max_frequency_list.sort()

#산술평균
print(round(sum_number / length))
#중앙값
print(value_list[len(value_list) // 2])
#최빈값
if len(max_frequency_list) == 1:
    print(max_frequency_list[0])
else:
    print(max_frequency_list[1])
#최소, 최대 범위
print(value_list[-1] - value_list[0])

(6) 실행결과


반응형

+ Recent posts