본문 바로가기

PS/백준

[백준 2108번] 통계학 (파이썬/python)

728x90

https://www.acmicpc.net/problem/2108

 

2108번: 통계학

첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.

www.acmicpc.net

 

최빈값 다루는게 좀 까다로웠는데

나는 딕셔너리를 사용해서 람다함수를 이용해 빈도수 최우선 내림차순으로 정렬해줬다.

혹시 0번 인덱스의 빈도수와 1번 인덱스의 빈도수가 같다면

1번 인덱스의 빈도수를 최빈값으로 넣어주었다.

 

https://foameraserblue.tistory.com/102?category=481823 

 

알고리즘용 파이썬 sorted 함수로 정렬하는 여러 방법들

파이썬으로 알고리즘을 풀다보면 정렬을 사용해야 되는 경우를 자주 본다. 알고리즘에서 많이 쓰이는 파이썬 자료형은 리스트, 이차원리스트, 딕셔너리 여러 경우의 수에 어떻게 정렬을 하면

foameraserblue.tistory.com

이렇게 정렬을 한 번 정리해놓으니 정렬만큼은 정말 수월하다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import sys
from math import ceil
 
input = sys.stdin.readline
 
= int(input())
li = []
dic = {}
for _ in range(t):
    li.append(int(input()))
# 정렬
li = sorted(li)
average = round(sum(li) / len(li))
mid = li[int(len(li) // 2)]
 
for i in li:
    if i in dic:
        dic[i] += 1
    else:
        dic[i] = 1
max_num = 0
_min = 0
dic = sorted(dic.items(), key=lambda item: (-item[1]))
 
if len(dic) > 1 and dic[0][1== dic[1][1]:
    _min = dic[1][0]
else:
    _min = dic[0][0]
 
range_ = li[-1- li[0]
 
print(average, mid, _min, range_, sep='\n')
 
cs
728x90