Back/Algorithm

Python 백준 2108 통계학

Python 백준 2108 통계학

www.acmicpc.net/problem/2108

 

2108번: 통계학

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

www.acmicpc.net

import sys
from collections import Counter
import math

input = sys.stdin.readline

n = int(input())
nums_list = []

for i in range(n):
    nums = int(input())
    nums_list.append(nums)

a = sum(nums_list) / len(nums_list)
ar = round(a)
print(ar)

nums_list.sort()

mid_index = len(nums_list) // 2
print(nums_list[mid_index])

nums_s = Counter(nums_list).most_common()
if len(nums_s) > 1:
    if nums_s[0][1] == nums_s[1][1]:
        print(nums_s[1][0])
    else:
        print(nums_s[0][0])
else:
    print(nums_s[0][0])

nums_list.sort()
print(nums_list[-1] - nums_list[0])

최빈값 구하기가 어려웠다.

 

나머지는 그대로 따라 쓰면 되는 거고,

 

Counter을 이용해서 튜플형태로받아온다.

 

여기서 sort를 쓰지 않고, 그대로 받으면, 밸류의 순서대로 정렬해서 받기 떄문에,

 

받은 리스트안의 튜플에서

 

첫번째와 두번재를 비교하여 같으면 바로 1번째 인덱스의 0번째 즉 키값을 반환하면 된다.

 

근데 nums_s의 길이가 1이 넘지 않으면 중복이 없는거니까 [0][0]을 프린트하면 된다.