백준 2108 : 통계학 - 파이썬 : Counter 클래스 활용

낙원·2022년 11월 24일
2

Baekjoon

목록 보기
12/15
post-thumbnail

문제

문제 링크

N개의 수가 주어질 때 산술평균, 중앙값, 최빈값, 범위를 출력하는 문제다.
최빈값이 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.

해결 방안

평균은 sum 함수를 사용 후 round로 반올림해 해결했다.
중앙값은 배열을 정렬 후 가운데 인덱스를 출력했다.
범위는 min, max 값을 구해 해결했다.

이 문제의 핵심인 최빈값은 Counter 클래스를 사용해 해결했다!!

코드

import sys
from collections import Counter

def modefinder(arr):
    c = Counter(arr)		#빈도를 저장
    order = c.most_common()	#빈도 기준으로 내림차순으로 정렬
    maximum = order[0][1]	#최대 빈도수를 maximum에 저장

    modes = []				#새로운 리스트
    for num in order:
        if num[1] == maximum:	#최빈값을 리스트에 추가
            modes.append(num[0])

    if len(modes) == 1:		#최빈값이 하나면 그냥 출력
        return modes[0]
    else:					#최빈값이 2개 이상이면 두 번째 값 출력
        return modes[1]


n = int(sys.stdin.readline())

arr = []

for i in range(n):
    arr.append(int(sys.stdin.readline()))


avg = sum(arr) / n
print(round(avg))


arr = sorted(arr)
print(arr[n//2])

most = modefinder(arr)
print(most)

print(max(arr) - min(arr))

🎯Counter 클래스

📢정의

Counter는 사전(dict) 클래스의 하위 클래스로 리스트나 튜플에서 각 데이터가 등장한 횟수를 사전 형식으로 돌려준다.

from collections import Counter

colors = ['red', 'blue', 'red', 'green', 'blue', 'blue']
cnt = Counter(colors)

#cnt 출력 결과
Counter({'blue': 3, 'red': 2, 'green': 1})

📖most_common() 메쏘드

등장한 횟수를 내림차순으로 정리해준다.

from collections import Counter

numbers = [1, 2, 3, 3, 4, 4, 4, 5, 5]
cnt = Counter(numbers)
cnt.most_common()

#출력 결과
[(4, 3), (3, 2), (5, 2), (1, 1), (2, 1)]

출처


최빈값 때문에 c언어로 풀 때는 포기했었던 문제다.
파이썬으로 풀면서 새로운 지식도 얻고 푸는 것도 성공하니 좋은 느낌? (ノ◕ヮ◕)ノ*:・゚✧

0개의 댓글