문제: https://www.acmicpc.net/problem/2108
최빈값을 구하는 부분에서 가장 애를 먹었다.
처음에는 most_common 함수가 dict 형태를 return 하는 줄 알아서 두 번째로 작은 값을 어떻게 찾나 싶었는데, 알고보니 리스트 형태를 반환한다고 한다.
또한 같은 빈도를 갖는 경우 첫 번째 원소를 기준으로 알아서 정렬이 되는 것 같다.
그래서 어렵지 않게 답을 찾을 수 있었다.
(참고: 파이썬 공식 레퍼런스 문서)
소스코드
from collections import Counter
import sys
input = sys.stdin.readline
def mean(n, numbers):
return round(sum(numbers) / n)
def median(n, numbers):
return numbers[n // 2]
def mode(n, numbers):
numbers_counter = Counter(numbers).most_common()
if n > 1:
if numbers_counter[0][1] == numbers_counter[1][1]:
return numbers_counter[1][0]
return numbers_counter[0][0]
def min_max(n, numbers):
return numbers[-1] - numbers[0]
n = int(input())
numbers = [int(input()) for _ in range(n)]
numbers.sort()
print(mean(n, numbers))
print(median(n, numbers))
print(mode(n, numbers))
print(min_max(n, numbers))