2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net


import statistics, sys
n = int(input())
lst = [int(sys.stdin.readline()) for _ in range(n)]

print(round(statistics.mean(lst)))
print(statistics.median(lst))
mode = statistics.multimode(lst)
if len(mode) > 1:
  mode.sort()
  print(mode[1])
else:
  print(mode[0])
print(max(lst) - min(lst))

다른 풀이들 찾아보니까 statistics 모듈을 사용한 풀이가 별로 보이지 않았다.

공부도 할 겸 스스로 코드를 짜서 푸는 게 나았을까?

 

차례대로 산술평균, 중앙값, 최빈값, 범위를 구하면 되는 문제였는데 다른 것들은 다 쉽게 풀 수 있는 것들이었는데 최빈값은 조금 생각을 해야 했다. 

 

조건이 최빈값이 여러 개 있을 경우에는 두 번째로 작은 최빈값을 출력하는 거라서 statistics의 mode 함수를 사용할 수는 없어서 multimode를 사용했다. 

mutimode는 최빈값들의 리스트를 반환한다. 

그래서 일단 리스트 길이를 보고 2 이상일 경우에는 최빈값이 여러 개 존재한다는 뜻이니까 정렬 후에 인덱스 1에 있는 값이 두 번째로 작은 값이니 그걸 출력하는 식으로 풀이했다. 

 

복사했습니다!