문제에서 구해야하는 값 중 중앙값, 최빈값은 정렬을 해야만 구할 수 있는 값이므로 정렬을 해야하는데, 그 중 최빈값을 구하는 방법에 따라 두 가지로 구현하였다.
2번 방법이 더 간단하지만 실행 결과를 보면 1번 방법이 메모리와 실행시간이 훨씬 효율적인 것을 볼 수 있다.
import sys
arr=[]
counts=[]
# 입력 정수의 범위가 -4000 ~ 4000
# 파이썬 음수 인덱싱을 이용하여 8001크기의 배열 생성
countarr=[0] * 8001
for _ in range(int(input())):
countarr[int(sys.stdin.readline().rstrip())] += 1
for i in range(-4000,4001):
for _ in range(countarr[i]):
arr.append(i)
print(round(sum(arr)/len(arr)))
print(arr[len(arr)//2])
# 최대 빈도 저장
maxfreq = max(countarr)
while True:
# index()메서드는 해당하는 값이 없으면 오류 출력
# try except문을 통해 제어한다.
try:
# 최대 빈도를 가진 인덱스 저장
idx = countarr.index(maxfreq)
# 찾은 값은 제거
countarr[idx] = 0
# 인덱스가 4000을 넘으면 8001을 뺀 인덱스로 본다.
if idx > 4000:
idx -= 8001
counts.append(idx)
except:
break
counts.sort() # 저장한 최대 빈도 값들을 정렬
if len(counts) > 1:
print(counts[1])
else:
print(counts[0])
print(max(arr)-min(arr))
import sys
from collections import Counter
arr=[]
for _ in range(int(input())):
arr.append(int(sys.stdin.readline().rstrip()))
arr.sort()
print(round(sum(arr)/len(arr)))
print(arr[len(arr)//2])
# 빈도수가 많은 순서대로 2개 저장
count = Counter(arr).most_common(2)
if len(count) > 1:
# 최빈값이 2개이면 작은 것 출력
if count[0][1] == count[1][1]:
print(count[1][0])
else:
print(count[0][0])
else:
print(count[0][0])
print(max(arr)-min(arr))