개미의 개열시미 프로그래밍

[알고리즘] 백준2108 통계학 - 파이썬 본문

알고리즘/정렬

[알고리즘] 백준2108 통계학 - 파이썬

YunHyeok 2021. 8. 21. 16:25
728x90
반응형

https://www.acmicpc.net/problem/2108

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

 

 

[풀이 코드]

import collections
from sys import stdin

n = int(stdin.readline())
a_list = [int(stdin.readline()) for _ in range(n)]
a_list.sort()

def average(array):
    return round(sum(array) / n) # 산술평균

def center(array):
    return array[n//2]

def freq(array):
    cnt = collections.Counter(array).most_common()
    # 입력값이 5 4 2 2 2 -1 일 경우
    # [(2, 3), (-1, 1), (4, 1)]
    # 갯수가 많은 원소 기준으로 내림차순으로 정렬이 된다.

    if len(cnt) > 1: # 입력 값이 1개 이상인 경우
        if cnt[0][1] == cnt[1][1]: # 최빈값이 여러개일 경우
            return cnt[1][0]
        else: # 최빈값이 하나라면
            return cnt[0][0]
    else: # 입력 값이 하나라면 바로 출력
        return cnt[0][0]


def range(array):
    return array[-1] - array[0]

print(average(a_list))
print(center(a_list))
print(freq(a_list))
print(range((a_list)))

- 산술평균 함수인 average()에서 round를 반올림해주는 쓰자!

 

- 최빈값을 구할 때 collections를 임포트 해서 Counter(). most_common() 함수를 활용했는데 주석에도 써놨듯이 공통으로 들어간 원소에 대해 내림차순으로 정렬을 해준다.

 

- 예를 들면 입력 값으로 4 2 2 2 -1 다섯 개의 값이 들어간다면 [(2, 3), (-1, 1), (4, 1)] 와 같이 출력된다.

 

728x90
반응형
Comments