728x90

통계학 문제의 경우는 시간/메모리가 충분하므로, collections 패키지의 Counter 함수를 알면 쉽게 풀 수 있다.

(나머지의 경우 파이썬 기본 문법을 알면 풀 수 있는 난이도)



이 문제에서는 4개의 답을 구해야 한다.


1. 산술평균 -> 배열의 합을 N으로 나눈다.

2. 중앙값 -> 배열을 정렬한 뒤 N/2 번째 수를 찾는다.

3. 최빈값 -> Counter 함수를 사용해 횟수를 체크하고 답을 구한다.

4. 범위 -> max, min 함수를 사용해 최댓값 - 최솟값을 한다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import sys 
from collections import Counter

= int(sys.stdin.readline())
arr = []

for _ in range(n):
    arr.append(int(sys.stdin.readline()))

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

# 중앙 값
arr.sort()
print(arr[n//2])

# 최빈 값
= Counter(arr).most_common()
print(k)

if len(k) > 1 and k[0][1== k[1][1]:
        print(k[1][0])
else:
    print(k[0][0])

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


1. 산술평균에서는 round 함수를 사용하여 (2번째 인자를 안 넣을 경우, 소수점 1번째 자리에서 반올림) 구하였다.


2. 중앙값의 경, 5//2의 경우 2가 나오지만 배열의 인덱스는 0부터 시작하므로 1을 더하지 않고 바로 사용하였다.


3. Counter 함수를 통해 생성된 k는 아래 사진과 같다.

Counter 함수의 결과

위의 사진의 경우 [x][0] 인덱스가 입력된 숫자, [x][1] 인덱스가 숫자가 입력된 횟수이다.

최빈값의 경우, 최빈값이 여러 개일 경우 두 번째로 작은 값을 출력해야 하므로 [1][0]을 출력하였다.

만약 입력된 숫자가 1개 또는 최빈값이 하나일 경우 [0][0]을 출력하였다.


4. max(arr) - min(arr)을 통해 쉽게 범위를 계산하였다.




파이썬 3과 pypy3의 경우 일반적으로 pypy3가 시간이 빠르고 메모리가 3배 정도 많이 사용된다.

(모든 경우 x, 파이썬 3가 빠른 경우도 있음)

이 문제의 경우 python3로 제출하였을 경우 메모리는 적지만 pypy3에 비해 시간이 많이 소요되었다.

728x90