What I Learned/Algorithm Practice
[백준 - python] 2108번: 통계학
Interrobang
2022. 9. 27. 19:45
<문제 링크>
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
<문제 풀이>
import sys
N = int(sys.stdin.readline())
num = []
count = [0] * 8001
for i in range(N):
n = int(sys.stdin.readline())
num.append(n)
count[n+4000] += 1
print(round(sum(num)/N))
print(sorted(num)[N//2])
mode = list(filter(lambda x: count[x] == max(count), range(len(count))))
if len(mode) == 1:
print(mode[0]-4000)
else:
print(mode[1]-4000)
print(max(num)-min(num))
*key point: 산술평균, 중앙값, 범위는 어렵지 않게 해결할 수 있지만 최빈값의 경우 비교적 어렵다. 최빈값을 계산하기 위하여 count라는 리스트를 활용하였고 이 때 음수를 고려하기 위해 가능한 가장 작은 n값인 4000을 더해주었다. filter 함수를 활용하여 최빈값이 여러 개인 경우도 고려하여 index를 찾아 list로 얻었으며, 출력시 더해주었던 4000을 빼주었다.