CS/알고리즘

백준 2108 통계학 파이썬 풀이

happy_life 2022. 3. 1. 22:50

문제

수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.

  1. 산술평균 : N개의 수들의 합을 N으로 나눈 값
  2. 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
  3. 최빈값 : N개의 수들 중 가장 많이 나타나는 값
  4. 범위 : N개의 수들 중 최댓값과 최솟값의 차이

N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.


 

정답풀이

#통계학 
from collections import Counter
import sys


value_list  = []
N = int(input())
for _ in range(N):
    #input으로 하면 시간초과
    value_list.append(int(sys.stdin.readline()))

value_list.sort()

print((round(sum(value_list)/N)))
print(value_list[len(value_list)//2])

mode_dict = Counter(value_list)

modes = mode_dict.most_common()

if len(value_list) > 1:
    if(modes[0][1]== modes[1][1]):
        print(modes[1][0])
    else:
        print(modes[0][0])
else:
    print(modes[0][0])
print(max(value_list)-min(value_list))

시간초과 풀이

#통계학 
from collections import Counter
import sys


value_list  = []
N = int(input())
for _ in range(N):
    value_list.append(int(input()))

value_list.sort()

print((round(sum(value_list)/N)))
print(value_list[len(value_list)//2])

mode_dict = Counter(value_list)

modes = mode_dict.most_common()

if len(modes) > 1:
    if(modes[0][1]== modes[1][1]):
        print(modes[1][0])
    else:
        print(modes[0][0])
else:
    print(modes[0][0])
print(max(value_list)-min(value_list))

배운점

 

1. / != //

  • /는 나눗셈을 의미하며 결과가 float로 나타납니다.
  • //는 나눗셈을 의미하며 결과가 int로 나타납니다.

2. input() vs sys.stdin.readline()

   input()은 사용자의 입력 받고 -> 문자열 변환 -> 개행 제거(rstrip() 함수를 적용)의 과정을 거친다

   sys.stdin.readline()  prompt 인수로 받지 않고, 개행 문자 포함한 값을 리턴한다

   여러 줄 입력받을 때 sys.stdin.readline()이 더 빠름.

 

3.백준 런타임오류 에러

- 가끔 똑같은 코드인데 런타임 오류 에러가 뜰 떄가 있음 . 한번은 더 해보기