백준 2108 통계학

홍찬우·2022년 12월 29일
0

문제

통계학

주어진 값들 사이의 산술평균, 중앙값, 최빈값, 범위를 구하자

난이도 : 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))

        

결과

최빈값 출력이 까다로웠던 것 같다.

profile
AI-Kid

0개의 댓글