통계학 문제의 경우는 시간/메모리가 충분하므로, 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 n = 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]) # 최빈 값 k = 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는 아래 사진과 같다.
위의 사진의 경우 [x][0] 인덱스가 입력된 숫자, [x][1] 인덱스가 숫자가 입력된 횟수이다.
최빈값의 경우, 최빈값이 여러 개일 경우 두 번째로 작은 값을 출력해야 하므로 [1][0]을 출력하였다.
만약 입력된 숫자가 1개 또는 최빈값이 하나일 경우 [0][0]을 출력하였다.
4. max(arr) - min(arr)을 통해 쉽게 범위를 계산하였다.
파이썬 3과 pypy3의 경우 일반적으로 pypy3가 시간이 빠르고 메모리가 3배 정도 많이 사용된다.
(모든 경우 x, 파이썬 3가 빠른 경우도 있음)
이 문제의 경우 python3로 제출하였을 경우 메모리는 적지만 pypy3에 비해 시간이 많이 소요되었다.
'알고리즘' 카테고리의 다른 글
백준 2342 Dance Dance Revolution ( 파이썬 / pypy ) (0) | 2021.07.20 |
---|---|
백준 10814 나이순 정렬 ( 파이썬 / pypy ) (0) | 2021.01.29 |
백준 10989 수 정렬하기3 ( 파이썬 / 파이썬3 / pypy3 ) (0) | 2021.01.28 |
삽입 정렬(insertion sort) - c 언어 코드(code) (0) | 2019.08.16 |
버블 정렬(bubble sort) - c 언어 코드(code) (0) | 2019.08.16 |