0429 알고리즘 2일차(~22)

박영선·2023년 4월 30일
0

최댓값

자료구조에서 가장 큰값 찾기

class MaxAlgorithm:

    def __init__(self,ns):
        self.nums = ns
        self.maxNum = 0

    def getMaxNum(self):
        self.maxNum = self.nums[0]

        for n in self.nums:
            if self.maxNum < n:
                self.maxNum = n

        return self.maxNum

ma = MaxAlgorithm([-2,-4,5,7,10,0,8,20,-11])
maxNum = ma.getMaxNum()
print(maxNum)

아스키 코드가 가장 큰값 찾기

class MaxAlgorithm:

    def __init__(self,cs):
        self.chars = cs
        self.maxChar = 0

    def getMaxChar(self):

        self.maxChar = self.chars[0]

        for c in self.chars:
            if ord(self.maxChar) < ord(c):
                self.maxChar = c

        return self.maxChar

chars = ['c','x','Q','A','e','P','p']
mc = MaxAlgorithm(chars)
maxChar= mc.getMaxChar()
print(f'maxChar:{maxChar}')

최솟값

최댓값과 동일한 알고리즘

class MinAlgorithm:

    def __init__(self,ns):
        self.nums = ns
        self.minNum = 0

    def getMinNum(self):
        self.minNum = self.nums[0]

        for n in self.nums:
            if self.minNum > n:
                self.minNum = n

        return self.minNum

mi = MinAlgorithm([-2,-4,5,7,10,0,8,20,-11])
minNum = mi.getMinNum()
print(minNum)

아스키 코드가 가장 작은값 찾기

class MinAlgorithm:

    def __init__(self,cs):
        self.chars = cs
        self.minChar = 0

    def getMinChar(self):

        self.minChar = self.chars[0]

        for c in self.chars:
            if ord(self.minChar) > ord(c):
                self.minChar = c

        return self.minChar

chars = ['c','x','Q','A','e','P','p']
mc = MinAlgorithm(chars)
minChar= mc.getMinChar()
print(f'minChar:{minChar}')

최빈값

데이터에서 빈도수가 가장 많은값
최댓값을 먼저 알아야함(indexes를 활용하기 위함)

class MaxAlgorithm:

    def __init__(self,ns):
        self.nums = ns
        self.maxNum = 0
        self.maxNumIdx = 0

    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)] #인덱스는 0 부터 시작이니까 +1 해줌
print(indexes)

for n in nums:
    indexes[n] = indexes[n]+1
print(indexes)

maxAlo = MaxAlgorithm(indexes) #인덱스에서 다시 최댓값 구하기
maxAlo.setMaxIdxAndNum()
maxNum = maxAlo.getMaxNum()
maxNumIdx = maxAlo.getMaxNumIdx()
print(f'maxNum : {maxNum}')
print(f'maxNumIdx : {maxNumIdx}')

print(f'즉, {maxNumIdx}의 빈도수가 {maxNum}로 가장 높다')

최댓값 클래스 위와 동일
실행

import random
import tempscore as ts

scores=[]
for i in range(100):
    rn = random.randint(71,100)
    if rn != 100: rn= rn-(rn%5)
    scores.append(rn)

print(scores)
print(len(scores))

#최댓값
maxAlo = ts.MaxAlgorithm(scores)
maxAlo.setMaxIdxAndNum()
maxNum = maxAlo.getMaxNum()
print((maxNum))

#인덱스 리스트 생성
indexes = [0 for i in range(maxNum+1)]
print(f'indexes: {indexes}')
print(f'indexes length : {len(indexes)}')

#인덱스 리스트에 빈도 저장
for n in scores:
    indexes[n] = indexes[n]+1
print(indexes)

n=1
while True:
    maxAlo = ts.MaxAlgorithm(indexes)
    maxAlo.setMaxIdxAndNum()
    maxNum = maxAlo.getMaxNum()
    maxNumIdx = maxAlo.getMaxNumIdx()
    print(f'maxNum : {maxNum}')
    print(f'maxNumIdx : {maxNumIdx}')

    if maxNum ==0:
        break
    print(f'{n}.{maxNumIdx}빈도수 : {maxNum} \t', end='')
    print('+'*maxNum)

    indexes[maxNumIdx]=0
    n+=1

근삿값

특정 값(참값) 에 가까운 값

import random

nums = random.sample(range(0,50),20)
print(nums)

inputNum = int(input('input number: '))
print(f'inputNum : {inputNum}')

nearNum = 0 #찾을 값
maxNum = 50

for n in nums:
    absNum= abs(n-inputNum) #절댓값 구하기
    #print(f'absNum : {absNum}')

    if absNum < maxNum:
        minNum = absNum
        nearNum = n

print(f'nearnum: {nearNum}')

점수 근삿값으로 학점 출력

근삿값 함수

def getNearNum(an):
    bascores = [95,85,75,65,55]
    nearNum = 0
    minNum = 100

    for n in bascores:
        absNum = abs(n -an)
        if absNum < minNum:
            minNum = absNum
            nearNum = n

    if nearNum == 95:
        return 'A'
    elif nearNum ==85:
        return 'B'
    elif nearNum ==75:
        return 'C'
    elif nearNum ==65:
        return 'D'
    elif nearNum <=55:
        return 'F'

함수사용 출력

import near

scores = []

kor = int(input('input kor score: '))
scores.append(kor)
eng = int(input('input eng score: '))
scores.append(eng)
mat = int(input('input mat score: '))
scores.append(mat)
sci = int(input('input sci score: '))
scores.append(sci)
his = int(input('input his score: '))
scores.append(his)

totalScore = sum(scores)
avgScore = totalScore/len(scores)

print(f'totalScore : {totalScore}')
print(f'avgScore : {avgScore}')

grade = near.getNearNum(avgScore)
print(f'grade : {grade}')

평균

중간값 구하기

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: {average}')

일부의 평균만 구하기

import random
nums = random.sample(range(0,100),10)
print(f'nums: {nums}')

total = 0
targetNums = []
for n in nums:
    if n>=50 and n <=90:
        total+=n
        targetNums.append(n)

average = total /len(targetNums)
print(targetNums)
print(round(average,2))

정수들의 평균만 구하기

nums = [4,5.12,0,5,7.34,9.1,9,3,3.159,1,11,12.789]
print(nums)

targetNums = []
total = 0
for n in nums:
    if n - int(n) == 0:
        total +=n
        targetNums.append(n)

average = total/len(targetNums)
print(targetNums)
print(round(average,2))
profile
데이터분석 공부 시작했습니다

0개의 댓글