[백준] - 2108 통계학 (Python)

밀루·2023년 8월 7일
0

BOJ

목록 보기
14/43

문제 링크

코드

import sys
from collections import Counter
n=int(sys.stdin.readline().strip())
l1=[]
for i in range(n):
    l1.append(int(sys.stdin.readline().strip()))
l1.sort()
print(round(sum(l1)/n+0.0000001)) #산술평균
print(l1[n//2]) #중앙값
cnt=Counter(l1).most_common(2)
if len(cnt)>=2: #n이 1이면 else로
    if cnt[0][1]==cnt[1][1]:
        print(cnt[1][0])
    else:
        print(cnt[0][0])
else:
    print(cnt[0][0]) #최빈값
print(l1[n-1]-l1[0]) #범위

풀이과정

가장 까다로웠던 게 최빈값이었는데 원래는 cnt라는 리스트에 각각 몇개 나왔는지 세어서 그걸 바탕으로 구해보려고 하다가 2개 이상일 때 두번째로 작은 수를 구하는 거에서 뇌정지가 와서 counter를 사용하였다.
Counter와 most_common을 이용해 빈도수가 큰 두개를 cnt에 저장하고 cnt의 길이가 2 이상일때 빈도수가 같으면 두번째로 작은 값을 출력하고 아니면 첫번째 것을 출력하도록 구현했다.

profile
이밀루의 도전

0개의 댓글