주어진 값들 사이의 산술평균, 중앙값, 최빈값, 범위를 구하자
난이도 : Silver3
1. 산술평균, 중앙값, 범위는 큰 문제 없이 구할 수 있다.
2. 카운팅 정렬을 이용해 최빈값을 구한다.
import sys
T = int(input())
A = []
def count_sort(arr):
temp = []
freq = 0
cnt_arr = [0] * 8001 # -4000 ~ 4000 총 8001개로 길이 고정 (입력 정수 최대값이 4000)
arr = list(map(lambda x:x+4000, arr)) # 음수 값이 존재하므로 먼저 모든 값을 양수로 변환
for i in arr:
cnt_arr[i] += 1
for i in range(len(cnt_arr)):
if cnt_arr[i] != 0:
for _ in range(cnt_arr[i]):
temp.append(i-4000) # 카운팅 정렬, 이 때 4000을 다시 빼서 원소들을 원래 값으로 돌려놓는다.
max_freq_idx = max(cnt_arr) # 가장 자주 등장하는 값의 등장 횟수를 저장
freq_list = [i-4000 for i, j in enumerate(cnt_arr) if j == max_freq_idx] # 등장 횟수가 등장 횟수 max인 원소들을 모두 저장
if len(freq_list) == 1:
freq = freq_list[0]
else:
freq = freq_list[1] # 최빈값이 여러 개일 시 2번째로 작은 값
return temp, freq
for _ in range(T):
A.append(int(sys.stdin.readline()))
arr, f = count_sort(A)
print(round(sum(arr)/len(arr)))
print(arr[len(arr)//2])
print(f)
print(max(arr)-min(arr))
최빈값 출력이 까다로웠던 것 같다.