알고리즘/백준
[Python] 백준 파이썬 2108 통계학
dding96
2022. 9. 13. 10:57
https://www.acmicpc.net/problem/2108
2108번: 통계학
첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다.
www.acmicpc.net
import sys
import numpy as np
from collections import Counter
n = int(input())
num = []
for _ in range(n):
num.append(int(sys.stdin.readline()))
if n == 1:
print(num[0])
print(num[0])
print(num[0])
print(0)
else:
num.sort()
num_counter = Counter(num)
most_common = num_counter.most_common(2)
print(int(np.rint(np.mean(num))))
print(int(np.median(num)))
if len(most_common) > 1:
if most_common[0][1] == most_common[1][1]:
print(most_common[1][0])
else:
print(most_common[0][0])
else:
print(most_common[0][0])
print(np.max(num)-np.min(num))
처음 제출한 코드
최빈값을 찾기 위해 Counter.most_common() 함수를 이용했습니다.
중앙값도 numpy.median()을 쓰면 간편하기 때문에 사용해줬습니다.
근데 계속 틀리길래 numpy를 사용하면 안되는 건가 싶어서 numpy 없이 제출했더니 통과했습니다.
백준에서는 numpy는 쓰지 마시길..
import sys
from collections import Counter
n = int(input())
num = []
for _ in range(n):
num.append(int(sys.stdin.readline()))
if n == 1:
print(num[0])
print(num[0])
print(num[0])
print(0)
else:
num.sort()
num_counter = Counter(num)
most_common = num_counter.most_common(2)
print(round(sum(num) / n))
print(num[n // 2])
if len(most_common) > 1:
if most_common[0][1] == most_common[1][1]:
print(most_common[1][0])
else:
print(most_common[0][0])
else:
print(most_common[0][0])
print(num[-1] - num[0])