본문 바로가기
코딩테스트/파이썬

[백준] [정렬] 통계학 2108 (파이썬)

by 커피는아아 2021. 3. 14.
반응형

개념

2020.11.24 - [Algorithm & Data structure] - [알고리즘] 선택정렬, 삽입정렬, 퀵정렬, 계수정렬 정리

 

[알고리즘] 선택정렬, 삽입정렬, 퀵정렬, 계수정렬 정리

정렬 선택 정렬 처리되지 않은 데이터 중에서 가장 작은 데이터를 선택해 맨앞에 있는 데이터와 바꾸는 것을 반복한다 시간 복잡도는 O(n^2) 삽입 정렬 처리되지 않은 데이터를 하나씩 골라 적합

seongbindb.tistory.com

코드

  • 정렬 시킨 이후에 문제를 풀어야한다.
  • 최빈 값 구현이 까다롭다.
# 통계학 분류
# 시간 제한	메모리 제한	제출	정답	맞은 사람	정답 비율
# 2 초	256 MB	43498	10336	8479	26.622%
# 문제
# 수를 처리하는 것은 통계학에서 상당히 중요한 일이다. 통계학에서 N개의 수를 대표하는 기본 통계값에는 다음과 같은 것들이 있다. 단, N은 홀수라고 가정하자.

# 산술평균 : N개의 수들의 합을 N으로 나눈 값
# 중앙값 : N개의 수들을 증가하는 순서로 나열했을 경우 그 중앙에 위치하는 값
# 최빈값 : N개의 수들 중 가장 많이 나타나는 값
# 범위 : N개의 수들 중 최댓값과 최솟값의 차이
# N개의 수가 주어졌을 때, 네 가지 기본 통계값을 구하는 프로그램을 작성하시오.

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

# 출력
# 첫째 줄에는 산술평균을 출력한다. 소수점 이하 첫째 자리에서 반올림한 값을 출력한다.

# 둘째 줄에는 중앙값을 출력한다.

# 셋째 줄에는 최빈값을 출력한다. 여러 개 있을 때에는 최빈값 중 두 번째로 작은 값을 출력한다.

# 넷째 줄에는 범위를 출력한다.
import sys

n = int(sys.stdin.readline().rstrip())

arr = []
for _ in range(n):
    arr.append(int(sys.stdin.readline().rstrip()))

arr.sort()

# 산술 평균
print(round(sum(arr) / n))

# 중간 값
print(arr[ len(arr) // 2 ])

# 최빈값
value = {}
for i in range(len(arr)):
    if i == 0:
        value[arr[i]] = 1
    else:
        if arr[i] in value.keys():
            value[arr[i]] = value[arr[i]] + 1
        else:
            value[arr[i]] = 1
max_arr = []
max_count = max(value.values())

for key in value.keys():
    if value[key] == max_count:
        max_arr.append(key)
if len(max_arr) > 1:
    print(max_arr[1])
else:
    print(max_arr[0])

# 범위
print(max(arr) - min(arr))