n개의 정수가 주어질 때,
산술 평균, 중앙값, 최빈값, 범위를 구하는 문제이다.
1) 산술 평균
정수 n개의 합을 n으로 나누면 된다.
소수 첫째 자리에서 반올림하여 정수 형태로 값을 출력해야 하는데,
round()는 가장 가까운 값에 따라 짝수로 반올림(round half to even)되기 때문에,
int()의 버림을 활용하여 0.5를 더하고 빼는 방식으로 반올림을 구현했다.
2) 중앙값
n이 홀수이므로, 정렬된 리스트에서 인덱스가 n // 2인 값이다.
3) 최빈값
반복문을 통해 각 정수의 개수를 구하고,
만약 최빈값이 여러 개라면 인덱싱을 통해 두 번째로 작은 값을 출력한다.
최빈값이 하나라면 그 값을 출력하면 된다.
4) 범위
정렬된 리스트의 마지막 원소(가장 큰 수)에서 첫 번째 원소(가장 작은 수)를 빼면 된다.
코드(정답)는 다음과 같다.
import sys
n = int(sys.stdin.readline())
lis, dic = [], {}
for _ in range(n):
num = int(sys.stdin.readline())
# 리스트 업데이트
lis.append(num)
# 딕셔너리 업데이트
if num in dic:
dic[num] += 1
else:
dic[num] = 1
# 산술 평균
if sum(lis) >= 0:
print(int((sum(lis) / n) + 0.5))
else:
print(int((sum(lis) / n) - 0.5))
# 중앙값
lis.sort()
print(lis[n // 2])
# 최빈값
max_freq = max(dic.values())
modes = [num for num, cnt in dic.items() if cnt == max_freq]
modes.sort()
if len(modes) > 1:
print(modes[1])
else:
print(modes[0])
# 범위
print(lis[-1] - lis[0])