-클래스
class RankDeviation:
def __init__(self, mss, ess):
self.midStuScos = mss
self.endStuScos = ess
self. midRanks = [0 for i in range(len(mss))]
self. endRanks = [0 for i in range(len(mss))]
self. rankDeviation = [0 for i in range(len(mss))]
def setRank(self, ss, rs):
for idx, sco1 in enumerate(ss):
for sco2 in ss:
if sco1 < sco2:
rs[idx] += 1
def setMidRank(self):
self. setRank(self.midStuScos, self.midRanks)
def getMidRank(self):
return self.midRanks
def setEndRank(self):
self. setRank(self.endStuScos, self.endRanks)
def getEndRank(self):
return self.endRanks
def printRankDeviation(self):
for idx, mRank in enumerate(self.midRanks):
deviation = mRank - self.endRanks[idx]
if deviation > 0:
deviation = '↑' + str(abs(deviation))
elif deviation < 0:
deviation = '↓' + str(abs(deviation))
else:
deviation = '=' + str(abs(deviation))
print(f'mid_rank : {mRank} \t end_rank : {self.endRanks[idx]} \t deviation : {deviation}')
20개의 랜덤한 숫자를 뽑아 오름차순으로 정렬
모듈
- 1부터 1000까지의 난수 100개를 생성하고, 아래의 요구사항을 만족하는 모듈 제작
- 생성된 난수들을 오름차순 and 내림차순으로 정렬하는 알고리즘 구현
- 생성된 난수 중 최소값과 최대값을 반홚나느 함수 구현
class SortNumbers:
def __init__(self, ns, asc=True):
self.nums = ns
self.isAsc = asc
def isAscending(self, flag):
self.isAsc = flag
def setSort(self):
for i1 in range(1, len(self.nums)):
i2 = i1 - 1
cNum = self.nums[i1]
if self.isAsc:
while self.nums[i2] > cNum and i2 >= 0:
self.nums[i2 + 1] = self.nums[i2]
i2 -= 1
else:
while self.nums[i2] < cNum and i2 >= 0:
self.nums[i2 + 1] = self.nums[i2]
i2 -= 1
self.nums[i2 + 1] = cNum
def getSortedNumbers(self):
return self.nums
def getMinNumber(self):
if self.isAsc:
return self.nums[0]
else:
return self.nums[len(self.nums) - 1]
def getMaxNumber(self):
if self.isAsc:
return self.nums[len(self.nums) - 1]
else:
return self.nums[0]
- 주어진 리스트 중 최소값을 찾아, 그 값을 맨 앞에 위치한 값과 교체하는 방식의 자료 정렬 알고리즘
- 선택정렬 알고리즘으로 학생 20명의 시험점수를 오름차순과 내림차순으로 정렬
- 시험 점수는 50부터 100까지로 한다.
- 자료구조에서 가장 큰 값을 찾는 것
- 자료구조에서 가장 작은 값을 찾는 것
- 자료구조에서 빈도 수가 가장 많은 데이터
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)]
print(f'indexes : {indexes}')
print(f'indexes : {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}로 가장 높다.')
최대값 및 인덱스 리스트 생성
while문을 이용한 값 출력
- 특정 값에 가장 가까운 값을 근사값이라고 한다.
- 여러 수나 쟝의 중간값을 갖는 수를 평균이라고 한다.
- 나 자신을 다시 호출하는 것을 재귀라고 한다.