[제로베이스] CH3. 알고리즘 - 최댓값, 최솟값, 근삿값, 최빈값

정해성·2023년 6월 26일
0

제로베이스

목록 보기
18/36
post-thumbnail

최댓값, 최솟값

최댓값 알고리즘은 말 그대로 최댓 값을 찾는 알고리즘으로 최대값 변수를 원소들 중 첫번째 값으로 초기화 하고 그 다음 원소를 하나하나 비교해가며 값이 큰 원소를 최대값 변수에 담으면 된다.(최솟값도 동일한 방법)

최솟값, 최댓값 두 가지를 찾는 알고리즘을 클래스로 구현해 보았다.

class MinMax:

    def __init__(self,numslist):
        self.nums = numslist
        self.maxNum = 0        #최대값
        self.minNum = 0        #최소값
    
    def getMax(self):
        self.maxNum = self.nums[0]
        for i in self.nums:
            if self.maxNum < i :
                self.maxNum = i
            
        return self.maxNum
        
    def getMin(self):
        self.minNum = self.nums[0]
        for i in self.nums:
            if self.minNum > i :
                self.minNum = i
            
        return self.minNum


list = [2,3,6,1,45,34,64,61,1,35,13,5]

M = MinMax(list)
print(f'Max is : {M.getMax()}')
print(f'Min is : {M.getMin()}')

최빈값

데이터에서 빈도수가 가장 많은 데이터를 최빈값이라고 한다. 최빈값 알고리즘을 이용해서 학생 50명의 점수 분포를 다음과 같이 나타내 보자.

import random
scores = []

for i in range(50): #50번 반복
    #n = random.radiant(70,100)  # 70이상 100이하 무작위 
    n = random.randrange(70,100,5) # 70이상 100이하 간격은 5로 무작위
    scores.append(n)

print(f'Scores list is : {scores}')

idxs = [0]*(max(scores)+1)
for i in scores:
    idxs[i] += 1

while True:
    maxScoreCnt = max(idxs)
    maxScore = idxs.index(maxScoreCnt)
    
    if maxScoreCnt == 0:
        break
    
    countstr = '+'*maxScoreCnt
    print(f'{maxScore} count is : {maxScoreCnt} {countstr}')
    
    idxs[maxScore] = 0

근삿값

특정 값(참값)에 가장 가까운 값을 근삿값이라고 한다.

list = [7, 43, 14, 44, 6, 26, 24, 3, 25, 47, 2, 32, 27, 38, 18, 17, 33, 29, 28, 0]

inputNum = int(input())

nearNum = 0
gap = max(list) 

for num in list:
    if abs(num-inputNum) < gap :
        gap = abs(num-inputNum)
        nearNum = num
    
print(f'Near num is : {nearNum}')
print(f'Gap is : {gap}')
profile
코린이 공부중

0개의 댓글