https://www.acmicpc.net/problem/2108
산술평균 - round(sum(nums) / n)
중앙값 - sort 혹은 sorted 정렬 후, 정중앙 수 nums[int((n - 1) / 2)]
** 최빈값
첫 구상 - 딕셔너리 생성 후 정수들 append 해서 가장 많은 밸류 찾기
구글링을 했더니 collection 모듈의 Counter 함수를 사용해 빈도수를 구하는 방법이 있었다.
출력 조건중 최빈값이 여러 개 있을 때에는 그중 두 번째로 작은 값을 출력하기 위해 조건문.
최빈값은 몇개가 됐던 두번째만 출력하면 되니까
mode = Counter(nums).most_common() # 빈도수 오름차순 정렬
mode_value = 0
if mode[0][1] == mode[1][1]: # 최빈값을 가지는 수가 두개 이상인 경우
mode_value = mode[1][0] # 두번째로 작은 수 출력
else: # 최빈값을 가지는 수가 하나인 경우
mode_value = mode[0][0] # 그대로 출력
이런식으로 정리해보았는데 인덱스 에러가 발생했다.. 왜그러지
수정본
mode = Counter(nums).most_common() # 빈도수 오름차순 정렬
mode_value = 0
if len(mode) == 1: # 최빈값을 가지는 수가 한개일경우
mode_value = mode[0][0] # 그대로 첫번째 값이 최빈값
elif mode[0][1] == mode[1][1]: # 최빈값을 가지는 수가 두개 이상인 경우
mode_value = mode[1][0] # 두번째로 작은 수 출력
else:
mode_value = mode[0][0]
범위 - (최댓값 - 최솟값) = (max(nums) - min(nums)), 혹은 오름차순 정렬을 시행했으므로 (nums[-1] - nums[0])
내 제출
import sys
from collections import Counter
n = int(sys.stdin.readline())
nums = []
for _ in range(n):
nums.append(int(sys.stdin.readline()))
# 산술평균
print(round(sum(nums) / n))
# 중앙값
nums.sort()
print(nums[int((n - 1) / 2)])
# 최빈값
mode = Counter(nums).most_common() # 빈도수 오름차순 정렬
mode_value = 0
if len(mode) == 1: # 최빈값을 가지는 수가 한개일경우
mode_value = mode[0][0] # 그대로 첫번째 값이 최빈값
elif mode[0][1] == mode[1][1]: # 최빈값을 가지는 수가 두개 이상인 경우
mode_value = mode[1][0] # 두번째로 작은 수 출력
else:
mode_value = mode[0][0]
print(mode_value)
# 범위
print(nums[-1] - nums[0])