[백준] 2108번 통계학

거북이·2023년 1월 19일
0

백준[실버3]

목록 보기
16/92
post-thumbnail

💡문제접근

  • 산술평균 : N개의 수들의 합을 N으로 나눈 값인데 이 때, 소수점 이하 첫째 자리에서 반올림한 값을 출력하는데 round()를 사용하면 된다.
  • 중앙값 : N개의 수들을 증가하는 순서로 나열하려면 sort()를 사용하고 중앙값은 (start + end) // 2로 인덱싱하여 구해주면 되는데 이 때
    길이가 1인 리스트의 경우를 조심해야한다.
  • 최빈값 : N개의 수들 중에서 가장 많이 나타나는 값을 구해주는건데 나는 이걸 구하기 위해 딕셔너리를 이용해서 데이터의 빈도를 저장하고 key = lambda를 사용해서 우선순위에 맞게 정렬한 다음 최빈값을 구해줬다.
  • 범위 : N개의 수들 중 최댓값과 최솟값의 차이이다. 간단하게 maxmin을 이용하면 된다.

💡코드(메모리 : 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

0개의 댓글