본문 바로가기
Algorithm

[구현/수학] 백준 2108 통계학 - Python

by jangThang 2022. 2. 10.
반응형

백준 온라인 저지

 

[ Contents ]

     

     

    1. 문제 (링크 참조)

     

    2108번: 통계학

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

    www.acmicpc.net

     

     

     

    2. 문제 풀이

     N개의 수열의 '산술평균', '중앙값', '최빈값', '범위'를 구하는 문제입니다.

     

    2022.01.19 - [Algorithm] - [Algorithm] 단골 1번 문제, 구현 / 수학

     

    [Algorithm] 단골 1번 문제, 구현 / 수학

    [ Contents ] 1. 구현  단순히 '구현'만 하면 되는 문제 유형입니다. 문제를 이해하고 입력에 맞춰 적절한 출력만 하면 됩니다. 특별한 알고리즘이나 프로그래밍적 기법 없이, 단순 제어문만 사용하

    star7sss.tistory.com

     

     

     

    3. 코드

    import sys
    from collections import Counter
    
    input = sys.stdin.readline
    
    N = int(input())
    numlist = []
    for i in range(N):
        numlist.append(int(input()))
    print(int(round(sum(numlist)/N, 0))) #산술평균
    numlist.sort()
    print(numlist[N//2]) #중앙값
    
    count = Counter(numlist).most_common()
    if len(count) > 1 and count[0][1] == count[1][1]: #최빈값이 2개 이상일 때는 2번째로 작은 값 출력
        print(count[1][0]) #최빈값
    else:
        print(count[0][0])
    print(max(numlist) - min(numlist)) #범위

     단순히 sort()만 해도 시간초과 나진 않았습니다.

    산술평균은 round 함수 써서 첫째 자리에서 반올림합니다.

    중앙값은 정렬한 후에 numlist[N//2]를 출력합니다. N이 홀수이므로 가운데 항목을 출력하면 됩니다.

    최빈값은 Counter 객체를 이용해서 구해줍니다. 2개 이상일 때는 '2번째로 작은 값'을 출력해야 합니다.

    범위는 max() - min()으로 구해줍니다.

     

     

    star가 되고나서 Tistory

    반응형

    댓글