
코드
import sys from collections import Counter N = int(input()) arr = [] for i in range(N): a = int(sys.stdin.readline()) arr.append(a) def mode(arr): c = Counter(arr) order = c.most_common() maximum = order[0][1] #제일 많이 반복된 숫자 cnt = 0 modes = [] for num in order: if num[1] == maximum: cnt+=1 modes=num[0] if cnt == 2: modes=num[0] return modes return modes arr.sort() u = int((N-1)/2) avg = round((sum(arr)/N)) cen = arr[u] ran = max(arr)-min(arr) k = mode(arr) print(avg) print(cen) print(k) print(ran)
난잡한 코드가 만들어졌다. 일단 입력시간을 줄이기 위해서 input 대신 sys를 이용했다. 그리고 counter, most_common을 사용하기 위해 counter 클래스도 가져왔다.
평균, 중앙값, 최빈값, 범위를 구하는 문젠데 최빈값이 핵심인듯하다.
평균은 arr의 합을 구한 다음 갯수로 나누고 round를 이용해 반올림했다.
중앙값은 순서대로 나열한 뒤 홀수개만 입력된다고 했으니 9개면 0123'4'5678과 같이 리스트의 (N-1)/2 번을 출력해주었다.
범위는 단순히 리스트의 최댓값에서 최솟값을 빼주었다.
최빈값은 따로 함수를 구현하여 구했다.
most_common을 이용해 가장 많이 반복된 숫자를 찾아준 뒤 그 숫자와 같은 숫자를 for문을 통해 찾는다. 그리고 modes리스트에 넣어주고 return하는 방식으로 구했다. 최빈값이 두 개 이상일 경우에는 두번째로 작은 값을 출력해야 하기 때문에 cnt변수를 넣어줘서 cnt가 2가 되는 경우 return하도록 구현했다.