Algorithm/BaekJoon
백준 22.01.26. 2108번 - 통계학
HappyFrog
2022. 1. 26. 21:51
↓ 틀린코드
더보기
from multiprocessing import Array
def mergeSort(array):
if len(array) < 2:
return array
middle = len(array) // 2
arr1 = mergeSort(array[:middle])
arr2 = mergeSort(array[middle:])
mergedList = []
i = j = 0
while i < len(arr1) and j < len(arr2):
if arr1[i] < arr2[j]:
mergedList.append(arr1[i])
i += 1
else:
mergedList.append(arr2[j])
j += 1
mergedList += arr1[i:]
mergedList += arr2[j:]
return mergedList
def findMode(array):
searchVal = set(array)
rec = {}
for i in searchVal:
if array.count(i) not in rec.keys():
rec[array.count(i)] = [i]
else:
rec[array.count(i)] = rec[array.count(i)] + [i]
result = list(rec[max(rec.keys())])
result = mergeSort(result)
if len(result) < 2:
return result[0]
return result[1]
N = int(input())
arr = []
for i in range(N):
arr.append(int(input()))
arr = mergeSort(arr)
print(round(sum(arr)/len(arr)))
print(arr[len(arr)//2])
print(findMode(arr))
print(max(arr) - min(arr))
익혔던 합병정렬을 이용하여 시도해봤지만 시간초과가 나왔습니다
import sys
from collections import Counter
arr = []
for _ in range(int(sys.stdin.readline())):
arr.append(int(sys.stdin.readline()))
arr.sort()
cnt = Counter(arr).most_common(2)
print(round(sum(arr) / len(arr)))
print(arr[len(arr) // 2])
if len(arr) > 1:
if cnt[0][1] == cnt[1][1]:
sys.stdout.write(str(cnt[1][0]) + "\n")
else:
sys.stdout.write(str(cnt[0][0]) + "\n")
else:
sys.stdout.write(str(cnt[0][0]) + "\n")
sys.stdout.write(str(max(arr) - min(arr)))
- 주어진 arr을 정렬해줍니다.
- 평균값을 위하여 round메서드를 사용했습니다.
- round메서드는 반올림을 해주는 메서드입니다. 두번째 매개변수가 없다면 정수로 반환해주지만 두번째 매개변수를 할당한다면 할당된 수 만큼의 소숫점까지 반환합니다.
- 정렬된 메서드에서 중간값을 구하기 위해 소숫점 이하를 버리는 "//"연산자를 사용하여 인덱스로 사용했습니다.
- Counter클래스의 most_common메서드는 최빈수부터 내림차순으로 정리해주는 역할을 합니다.
- 매개변수로 주어진 수 만큼 내림차순으로 최빈수를 반환합니다.
- Counter클래스로 정리해둔 값을 활용하여 최빈수 또는 두번째로 작은 최빈수를 출력합니다.
- 위 사진에서 볼 수 있듯이 최빈수순으로 정리되며 작은 값부터 정리됩니다.
- cnt[n][1]은 빈도를 나타냅니다.
- 첫번째와 두번째의 빈도가 같다면 두번째를 출력해줍니다.
- 그렇지 않다면 첫번째를 출력해줍니다.
- 또는 주어진 수의 배열길이가 1일때를 대비하여 또 다른 분기를 생성하여 cnt의 처음 값을 출력하도록 해줍니다.
- 범위는 배열내의 최댓값과 최솟값을 구하여 그 차이를 출력했습니다.