본문 바로가기
알고리즘

백준 2108번 통계학

by Lihano 2021. 9. 16.
반응형

풀이 언어 : PYTHON

풀이 방법 : 카운팅 정렬

# 음수를 포함해서 정렬시키는 방법을 써야합니다.
# 전에 써먹은 카운팅 정렬을 개량해서 사용합시다.
# 최빈값이 문제입니다. 최빈값 끼리도 모아서 정렬을 시켜야합니다.

import sys

# 입력의 수
n = int(sys.stdin.readline())
# 수의 범위는 -4000~+4000입니다. 배열의 크기는 8001이면 충분합니다.
arr = [0]*8001
avg = 0
many = 0
# for문을 돌려서 수를 입력받읍시다.
for _ in range(n) :
    num = int(sys.stdin.readline())
    # 입력받은 수가 음수일 수도 있으니 +4000을 해서 배열에 넣어줍니다.
    arr[num+4000] += 1
    # 겸사겸사 최빈값의 출연횟수를 구해줍니다.
    if arr[num+4000] > many :
        many = arr[num+4000]
    # 겸사겸사 평균산술을 구해줍시다.
    avg+=num

# 평균산술을 규정합니다.
avg = round(avg/n)
# 중앙값의 인덱스를 구해줍니다.
middle_idx = n//2+1
middle = 0
# 최빈수의 리스트를 선언
many_arr = []

min = -10000
max = 0
cnt = 0
for (index, value) in enumerate(arr) :
    if arr[index] != 0 :
        # 최솟값 구하기
        if min == -10000 :
            min = index
        # 최댓값 구하기
        max = index
        # 최빈값 리스트에 넣기
        if value == many :
            many_arr.append(index)
        for _ in range(value) :
            cnt += 1
            # 중앙값 구하기
            if cnt == middle_idx :
                middle = index
# 산술 평균 출력
print(avg)
# 중앙값 출력
print(middle-4000)
# 최빈값 리스트 출력
if len(many_arr) > 1 :
    print(many_arr[1]-4000)
else :
    print(many_arr[0]-4000)
# 범위 출력
print(max-min)

 

링크

2108번: 통계학 (acmicpc.net)

반응형

댓글