문제에서 제시한 조건대로 풀면 된다. 파이썬은 내장 모듈이 잘 되어 있어 간편하다.
산술평균 : N개의 수들의 합을 N으로 나눈 값, 소수점 이하 첫째 자리에서 반올림한 값 -> sum()
, round()
사용
중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값 -> sort()
사용, N은 홀수만 등장
최빈값 : N개의 수들 중 가장 많이 나타나는 값 -> Counter
라이브러리의most_common()
메서드 사용, 여러개의 최빈값이 등장하는 경우 고려
범위 : N개의 수들 중 최댓값과 최솟값의 차이 -> min()
, max()
사용
여러개의 최빈값이 등장하는 경우를 고려하기 위해 등장빈도를 저장한 배열 c_nums
을 반복문으로 돌면서 만약 가장 많이 등장한 데이터가 여러개인 경우 most_common_arr
에 저장해주었다. 최빈값이 아닌 데이터가 등장하는 경우 바로 반복문을 탈출해주면 된다. (break
안 적어주면 등장 빈도가 같은 데이터가 모두 들어가서 오답)
from sys import stdin
from collections import Counter
input = stdin.readline
N = int(input())
nums = [int(input()) for _ in range(N)]
# 산술평균 : N개의 수들의 합을 N으로 나눈 값. 소수점 이하 첫째 자리에서 반올림한 값
print(round((sum(nums) / N)))
# 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
nums.sort()
print(nums[N // 2])
# 최빈값 : N개의 수들 중 가장 많이 나타나는 값
c_nums = Counter(nums).most_common()
most_common_arr = []
first = True
for i in range(len(c_nums)):
if first:
most_common_arr.append(c_nums[i][0])
if i + 1 < len(c_nums) and c_nums[i][1] == c_nums[i + 1][1]:
most_common_arr.append(c_nums[i + 1][0])
else:
first = False
break
# 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.
if len(most_common_arr) == 1:
print(most_common_arr[0])
else:
most_common_arr.sort()
print(most_common_arr[1])
# 범위 : N개의 수들 중 최댓값과 최솟값의 차이
print(max(nums) - min(nums))