[Python] 백준2108 통계학

[Python] 백준2108 통계학

백준2108 통계학 링크

문제

문제

예제 입력

예제


코드

import sys
from collections import Counter
n = int(sys.stdin.readline())
nums = [ int(sys.stdin.readline()) for _ in range(n) ]

# mean
print(round(sum(nums) / n))

# median (int(n-1 / 2))
nums.sort()
print(nums[n // 2])

# mode ([0][0] = key, [0][1] = count)
nums_s = Counter(nums).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])

# range (max(nums) - min(nums))
print(nums[-1] - nums[0])

설명

파이썬을 통해서 사용자로부터 입력받아 자료형 Counter을 사용하여 통계학을 구현했습니다.


정리

import math
# 소수점을 n번째 까지만 표현하고 반올림을 하고싶을때, round 함수를 사용합니다.
>>> round(7/15, 2)
0.47 (0.466666)
# 올림
math.ceil(value)
# 내림
math.floor(value)
# 반올림
round(value)


import statistics
# 평균
statistics.mean()
# 중앙값
statistics.median()


from collections import Counter
colors = Counter(['blue', 'green', 'red', 'blue','red','blue'])

print(colors)
# Counter({'blue': 3, 'red': 2, 'green': 1})

print(colors.most_common())
# most_common()는 등장한 횟수를 내림차순으로 정리하여 위와 같이 보여줍니다. 
# [('red', 3), ('blue', 2), ('green', 1)]

print(colors.most_common(2))
# 가장 많은 것 부터 2개 출력
# [('red', 3), ('blue', 2)]


# 최빈값
counts = {}
for i in n_list:
    if i in counts:
        counts[i] += 1
    else:
        counts[i] = 1

counts = sorted(counts.items(), key = lambda counts : counts[1], reverse=True)

if N != 1 and counts[0][1] == counts[1][1]:
    print(counts[1][0])
else:
    print(counts[0][0])

처음에는 반복문으로 풀어 시간 초과가 발생했지만 통계학에 대한 많은 자료를 찾아보았고 제출한 방법말고 다양한 방식을 배울 수 있었습니다.


결과

결과


© 2022. All rights reserved. 신동민의 블로그