[백준 2108] 통계학_Python

코뉴·2021년 1월 28일
0

백준🍳

목록 보기
15/149

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

🥚문제


🥚입력/출력


🍳코드

import sys

n = int(sys.stdin.readline()) # 1<=N<=500,000, N 기반 리스트 생성 불가능
nums = dict() # 딕셔너리 형식으로 숫자:등장횟수 저장
# 딕셔너리에 입력
for i in range(n):
    data = int(sys.stdin.readline())
    if data in nums:
        nums[data] += 1
    else:
        nums[data] = 1
# 산술평균
summation = 0
for key in nums.keys():
    summation += key*nums[key]
print(round(summation/n))
# 중앙값
count = 0
for key in sorted(nums.keys()):
    for _ in range(nums[key]):
        count += 1
        if count == n//2+1: # 중앙값 번째라면
            print(key) # 중앙값 프린트
            break
# 최빈값
freq_list = [] # 최빈값이 많은 경우 저장
max_frq = max(nums.values()) # 최빈 횟수
for key in nums.keys():
    if nums[key] == max_frq: # 최빈 등장한 수를 frq_list에 저장
        freq_list.append(key)
# 하나 있을 때는 그냥 출력
if len(freq_list) == 1:
    print(freq_list[0])
# 여러개 있을 때는 최빈값 중 두 번째로 작은 값 출력
elif len(freq_list) > 1:
    freq_list.sort()
    print(freq_list[1])
# 범위
max_key = max(nums.keys())
min_key = min(nums.keys())
print(max_key - min_key)

🧂아이디어

  • 딕셔너리를 사용했다.

  • 파이썬의 반올림은 따로 import할 필요 없이 기본 내장 함수인 round()를 사용하면 된다.

profile
코뉴의 도딩기록

0개의 댓글