728x90
1. 최빈값
데이터에서 빈도수가 가장 많은 데이터를 최빈값이라고 한다
nums = [1, 3, 7, 6, 7, 7, 7, 12, 12, 17]
0부터 17까지 0으로 이루어진 indexes라는 리스트를 만들고
nums를 돌면서 해당 숫자의 index에 +1을 해준다
indexes: [0, 1, 0, 1, 0, 0, 1, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1]
indexes에서 최댓값 알고리즘을 통해 최댓값의 index를 뽑는다
해당 index가 nums 리스트의 최빈값이다
class MaxAlgorithm:
def __init__(self, ns):
self.nums = ns
self.maxNum = 0
self.maxNumIdx = 0
#최빈값을 구해야하므로 가장 큰 숫자와 그의 Idx를 구하는 함수
def setMaxIdxAndNum(self):
self.maxNum = self.nums[0]
self.maxNumIdx = 0 #초기화
for i, n in enumerate(self.nums):
if self.maxNum < n:
self.maxNum = n
self.maxNumIdx = i
def getMaxNum(self):
return self.maxNum
def getMaxNumIdx(self):
return self.maxNumIdx
nums = [1, 3, 7, 6, 7, 7, 7, 12, 12, 17]
#객체 생성, 초기화
maxAlo = MaxAlgorithm(nums)
maxAlo.setMaxIdxAndNum()
maxNum = maxAlo.getMaxNum()
print(f'maxNum : {maxNum}')
indexes = [0 for i in range(maxNum + 1)]
print(f'indexes : {indexes}')
print(f'indexes length : {len(indexes)}')
for n in nums:
indexes[n] = indexes[n] + 1
print(f'indexes : {indexes}')
maxAlo = MaxAlgorithm(indexes)
maxAlo.setMaxIdxAndNum()
maxNum = maxAlo.getMaxNum()
maxNumIdx = maxAlo.getMaxNumIdx()
print(f'maxNum : {maxNum}')
print(f'maxNumIdx : {maxNumIdx}')
print(f' 즉, {maxNumIdx}의 빈도수가 {maxNum}으로 가장 높다.')
2. 근삿값
기준이 되는 key값에서 가장 가까운 값을 근삿값이라고 한다.
nums = [7, 43, 14, 44, 6, 26, 24, 3, 25, 47, 2, 32, 27, 38, 18, 17, 33, 29, 28, 0]
input number : 11인 경우
11과의 차이에 절댓값을 씌워 최소값의 index를 nums에서 사용해 근삿값을 도출한다.
import random
nums = random.sample(range(0, 50), 20)
print(f'nums : {nums}')
inputNum = int(input('input number :'))
print(f'inputNum : {inputNum}')
nearNum = 0
minNum = 50 #50이 가장 큰 값으로 설정했으므로 50으로 초기화를 시킴. 하지만, 최댓값 알고리즘으로 정하는게 확실함
for n in nums:
absNum = abs(n - inputNum)
#print(f'absNum : {absNum}')
if absNum < minNum:
minNum = absNum
nearNum = n
print(f'nearNum : {nearNum}')
3. 평균
여러 수나 양의 중간값을 갖는 수를 평균이라고 한다.
import random
nums = random.sample(range(0, 100), 10)
print(f'nums : {nums}')
total = 0
for n in nums:
total += n
average = total/len(nums)
print(f'average: {round(average, 2)}')
여기서 random한 숫자 리스트를 얻기 위해 쓴 함수는
random 모듈을 사용한다.
random 모듈의 sample함수를 사용하고 range(start number, end number), count 를 사용하면 된다.
또 평균을 구할 때 round함수를 사용해 2번째 자리로 반올림하는 함수도 사용해보았다.
728x90
'코딩 > 알고리즘' 카테고리의 다른 글
[정렬] 병합정렬, 퀵정렬 (0) | 2023.02.09 |
---|---|
재귀 알고리즘, 하노이의 탑 (0) | 2023.02.09 |
[비교] 최댓값, 최솟값 알고리즘 (0) | 2023.02.06 |
[정렬] 선택정렬 알고리즘 (0) | 2023.01.31 |
[정렬] 삽입정렬 알고리즘 (0) | 2023.01.31 |