백준-2108 통계학 (최빈값! Counter, most_common())자료구조+알고리즘2021. 5. 22. 21:22
Table of Contents
문제
https://www.acmicpc.net/problem/2108
풀이
최빈값 구하는게 어려운 문제이다.
파이썬에서 어떤 요소가 얼마나 나왔는지 구하는 방법은 Counter를 이용해서 구할 수 있다.
Counter를 이용하면 딕셔너리 형태로 key 값에 가장 많이 나온 수, value 값에 그 수의 갯수가 나온다. value 값을 기준으로 내림차순 되어서 출력되지만 만약 value 값이 같다면, 리스트에서 key 값이 먼저 나온 순으로 나온다.
즉, 리스트에서 갯수가 가장 많은 수 기준으로 내림차순 되고 만약, 갯수가 같다면 리스트에서 가장 먼저 나온 수 기준으로 정렬된다!
from collections import Counter
N = [3, 4, 4, 5, 5, 3, 2, 2, 5, 1, -1]
print(Counter(N))
>>>Counter({5: 3, 3: 2, 4: 2, 2: 2, 1: 1, -1: 1})
따라서, 가장 많이 나온 수를 기준으로 정렬하고 만약 수가 나온 횟수가 같을 때 오름차순으로 정렬하고 싶으면 리스트를 먼저 정렬하고 Counter를 사용하면 된다!!
from collections import Counter
N = [3, 4, 4, 5, 5, 3, 2, 2, 5, 1, -1]
N.sort()
print(Counter(N))
>>>Counter({5: 3, 2: 2, 3: 2, 4: 2, -1: 1, 1: 1})
반환 결과를 리스트로 변환해서 사용하기 편하게 사용하고 싶으면 list(Counter.items())처럼 사용할 수 있지만 Counter의 함수인 most_common을 이용하자.
from collections import Counter
N = [3, 4, 4, 5, 5, 3, 2, 2, 5, 1, -1]
N.sort()
print(Counter(N).most_common())
>>> [(5, 3), (2, 2), (3, 2), (4, 2), (-1, 1), (1, 1)]
답
from collections import Counter
import sys
N = int(input())
a = sorted([int(sys.stdin.readline()) for i in range(N)])
print(round(sum(a) / N)) # 산술 평균
print(a[N // 2]) # 중앙값, 반올림
#최빈값
counter = Counter(a).most_common()
if N == 1:
print(a[0])
else:
if counter[0][1] == counter[1][1]:
print(counter[1][0])
else:
print(counter[0][0])
print((a[-1]) - a[0]) # 범위
'자료구조+알고리즘' 카테고리의 다른 글
백준-2805 나무자르기 (이분탐색) (0) | 2021.05.24 |
---|---|
백준-나무자르기/프로그래머스-입국심사(이분탐색) (0) | 2021.05.23 |
백준-2164 카드게임2 (deque) (0) | 2021.05.22 |
백준-1929 소수 구하기 (에라토스테네스의 체) (0) | 2021.05.22 |
백준-1181 단어 정렬하기 (sort 함수, lambda) (0) | 2021.05.13 |
@덕구공 :: Duck9s'
주니어 개발자에욤
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!