본문 바로가기

알고리즘/백준

[Python] 백준 파이썬 2108 통계학

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])