- 최솟값
- 자료구조에서 가장 작은 값을 찾는다!
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: # minNum보다 작은값이 있다는 것은 minNum이 최소값이 아니라는 뜻!
self.minNum = n
return self.minNum
nums = [-2, -4, 5, 7, 10, 0, 8, 20, -11]
ma = MinAlgorithm(nums)
minNum = ma.getMinNum()
print(f'minNum : {minNum}')
- 최솟값(실습)
- 리스트에서 아스키코드가 가장 작은 값을 찾는 알고리즘을 만들어보자!
class MaxAlgorithm:
def __init__(self, cs):
self.chars = cs
self.minChar = 0
def getMinChar(self):
self.minChar = self.chars[0] # 외부에서 받은 chars 리스트의 가장 첫번째 값으로 초기화!
for c in self.chars:
if ord(self.minChar) > ord(c): # ord() 문자를 아스키코드값으로 변환해 주는 함수!
self.minChar = c
return self.minChar
chars = ['c', 'x', 'Q', 'A', 'e', 'P', 'p']
mc = MaxAlgorithm(chars)
minChar = mc.getMinChar()
print(f'minChar : {minChar}')
class CharToAscii():
def __init__(self, css):
self.chars = css
self.ordChars = []
def changeord(self):
for o in self.chars:
aaa = ord(o)
self.ordChars.append(aaa)
return self.ordChars
chars = ['c', 'x', 'Q', 'A', 'e', 'P', 'p']
mc = CharToAscii(chars)
ordChar = mc.changeord()
print(f'ordChar : {ordChar}')
- 최빈값(mode)
- 데이터에서 빈도수가 가장 많은 데이터를 최빈값이라고 한다!
nums = [1, 3, 7, 6, 7, 7, 7, 12, 12, 17]
↘ ↘ ↘ ↘
indexes : [0, 1, 0, 1, 0, 0, 1, 4, 0, 0, 0, 0, 2, 0, 0, 0, 1] 숫자를 인덱스 번호로 생각하고 거기에 하나씩 더 해준다!
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
최대값을 먼저 구해야함 → 최대값을 끝으로하는 리스트를 만들어야 하므로!
class MaxAlgorithme:
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 = MaxAlgorithme(nums)
maxAlo.setMaxIdxAndNum()
maxNum = maxAlo.getMaxNum()
print(f'maxNum : {maxNum}')
indexes = [0 for i in range(maxNum + 1)] # 최대값만큼 0으로 채워진 리스트 생성!
print(f'indexes : {indexes}')
print(f'indexes length : {len(indexes)}')
for n in nums:
indexes[n] = indexes[n] + 1 # 해당 인덱스가 등장할때마다 +1!
print(f'indexes : {indexes}') # 가장 많이 등장한 수의 인덱스가 수가 가장 크다!!
maxAlo = MaxAlgorithme(indexes)
maxAlo.setMaxIdxAndNum()
maxNum = maxAlo.getMaxNum()
maxNumIdx = maxAlo.getMaxNumIdx()
print(f'maxNum : {maxNum}')
print(f'maxNumIdx : {maxNumIdx}')
print(f'즉, {maxNumIdx}의 빈도수가 {maxNum}로 가장 높다.')
- 최빈값(실습)
모듈 파일 코드
class MaxAlgorithm:
def __init__(self, ns):
self.nums = ns
self.maxNum = 0
self.maxNumIdx = 0
def setMaxNumIdxAndNum(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
실행 파일 코드
import random
import module_mode as mm
scores = []
for i in range(100):
rn = random.randint(71, 100) # 71 ~ 100점까지
if rn != 100: rn = rn - (rn % 5) # 5로 나눈 나머지를 빼주면 5단위로 끊을 수 있다!
scores.append(rn)
print(f'scores : {scores}')
print(f'scores length: {len(scores)}')
# 최대값
maxAlgo = mm.MaxAlgorithm(scores)
maxAlgo.setMaxNumIdxAndNum()
maxNum = maxAlgo.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 scores:
indexes[n] = indexes[n] + 1
print(f'indexes : {indexes}')
n = 1
while True:
maxAlgo = mm.MaxAlgorithm(indexes)
maxAlgo.setMaxNumIdxAndNum()
maxNum = maxAlgo.getMaxNum()
maxNumIdx = maxAlgo.getMaxNumIdx()
# print(f'maxNum : {maxNum}')
# print(f'maxNumIdx : {maxNumIdx}')
if maxNum == 0:
break
print(f'{n}. {maxNumIdx} 빈도수 : {maxNum}', end='')
print(f'+' * maxNum)
indexes[maxNumIdx] = 0 # 이 코드가 없으면 가장 큰놈만 계속 출련된다!
n += 1