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) 실행결과
반응형
'BaekJoon Algorithm > Python' 카테고리의 다른 글
[백준알고리즘 - 15650] N과 M (2) (Python) (0) | 2021.03.28 |
---|---|
[백준알고리즘 - 2630] 색종이 만들기 (Python) (0) | 2021.03.20 |
[백준알고리즘 - 1260] DFS와 BFS (Python) (0) | 2021.03.20 |
[백준알고리즘 - 18258] 큐 2 (Python) (0) | 2021.03.20 |
[백준알고리즘 - 9012] 괄호 (Python) (0) | 2021.03.19 |