728x90
반응형
문제 설명
수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.
- 산술평균 : N개의 수들의 합을 N으로 나눈 값
- 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
- 최빈값 : N개의 수들 중 가장 많이 나타나는 값
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이
N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.
문제 링크
https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
입출력 예시
프로그램 코드
import sys #입력을 위한 라이브러리 import
N = int(input()) #N 입력
dic = {} #숫자 : 빈도수 저장 위한 딕셔너리
nums = [] #숫자들 저장 위한 리스트
for i in range(N): #숫자 N개 입력
num = int(sys.stdin.readline())
nums.append(num)
if num not in dic.keys(): #딕셔너리에 빈도수 저장
dic[num] = 1
else:
dic[num] += 1
nums.sort() #중앙값 계산을 위한 리스트 정렬
avg = round((sum(nums) / len(nums))) #평균 계산 round() 반올림
cen = nums[len(nums)//2] #중앙값 계산
mx = max(dic.values()) #최대 빈도수 숫자 구하기
numbers = [] #최대 빈도수 숫자 저장할 리스트
for key, value in dic.items(): #딕셔너리 조회
if value == mx: #최대 빈도수면
numbers.append(key) #리스트에 저장
if len(numbers) == 1: #최대 빈도수가 1개일 때
fre = numbers[0]
else: #최대 빈도숫자가 여러개 일 때
numbers.sort()
fre = numbers[1]
ran = max(nums) - min(nums) #범위
print(avg)
print(cen)
print(fre)
print(ran)
프로그램 코드 설명
구해야 하는 값은 총 4가지.
산술평균 : N개의 수들의 합을 N으로 나눈 값
중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
최빈값 : N개의 수들 중 가장 많이 나타나는 값
범위 : N개의 수들 중 최댓값과 최솟값의 차이
산술평균 : 모든 값을 리스트에 저장 후 (모든 리스트 합 / 리스트 길이) 를 반올림 하면 된다.
중앙값 : 리스트 정렬 후 가운데 인덱스에 있는 값을 구하면 된다.
최빈값 : 딕셔너리에 숫자별 빈도수를 저장하고 최대 빈도수를 구한다. 최대 빈도수를 가진 숫자들을 찾는다. 그 숫자들이 1개라면 그 값을, 2개 이상이라면 두번째로 작은 숫자를 출력한다.
범위 : 리스트의 최대값에서 최소값을 빼주면 된다.
728x90
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[파이썬] 백준 2231번 분해합 문제 풀이 python (0) | 2024.02.06 |
---|---|
[파이썬] 백준 2164번 카드2 문제 풀이 python (1) | 2024.02.06 |
[파이썬] 백준 1978번 소수 찾기 문제 풀이 (0) | 2024.02.05 |
[파이썬] 백준 1966번 프린터 큐 문제 풀이 (2) | 2024.02.05 |
[파이썬] 리스트로 큐 자료구조 만들기 Queue (1) | 2024.02.05 |