💡문제접근
- 산술평균 : N개의 수들의 합을 N으로 나눈 값인데 이 때, 소수점 이하 첫째 자리에서 반올림한 값을 출력하는데
round()
를 사용하면 된다.
- 중앙값 : N개의 수들을 증가하는 순서로 나열하려면
sort()
를 사용하고 중앙값은 (start + end) // 2로 인덱싱하여 구해주면 되는데 이 때
길이가 1인 리스트의 경우를 조심해야한다.
- 최빈값 : N개의 수들 중에서 가장 많이 나타나는 값을 구해주는건데 나는 이걸 구하기 위해 딕셔너리를 이용해서 데이터의 빈도를 저장하고
key = lambda
를 사용해서 우선순위에 맞게 정렬한 다음 최빈값을 구해줬다.
- 범위 : N개의 수들 중 최댓값과 최솟값의 차이이다. 간단하게
max
와 min
을 이용하면 된다.
💡코드(메모리 : 151692KB, 시간 : 368ms, PyPy3로 제출)
import sys
N = int(input())
li = []
dict = {}
for _ in range(N):
val = int(sys.stdin.readline().strip())
li.append(val)
if val not in dict:
dict[val] = 1
else:
dict[val] += 1
li.sort()
dict = sorted(dict.items(), key = lambda x : (-x[1], x[0]))
start = 0
end = len(li) - 1
mid = (start + end) // 2
print(int(round(sum(li) / N, 0)))
if len(li) == 1:
print(li[0])
else:
print(li[mid])
if len(li) > 1 and dict[0][1] == dict[1][1]:
print(dict[1][0])
elif len(li) > 1 and dict[0][1] != dict[1][1]:
print(dict[0][0])
else:
print(dict[0][0])
print(max(li) - min(li))
💡소요시간 : 3m