Q. 최댓값 알고리즘 이용해서 숫자로 이루어진 리스트에서 최댓값의 개수를 찾는 모듈(리스트는 1-50까지 난수 30개 이용하되, 중복 허용)
<mergeAl 모듈>
class MaxAlgorithm:
def __init__(self, ns):
self.nums = ns
self.maxNum = 0
self.maxNumCnt = 0
def setMaxNum(self):
self.maxNum = self.nums[0]
for num in self.nums:
if num >= self.maxNum:
self.maxNum = num
def getMaxNum(self):
self.setMaxNum()
return self.maxNum
def setMaxNumCnt(self):
for n in self.nums:
if self.maxNum == n:
self.maxNumCnt += 1
def getMaxNumCnt(self):
return self.maxNumCnt
_________________________________________
<실행문>
import random
import mergeAl as ma
if __name__ == '__main__':
nums = []
for n in range(30):
nums.append(random.randint(1,50))
print(f'nums: {nums}')
result = ma.MaxAlgorithm(nums)
result.setMaxNum()
result.setMaxNumCnt()
print(f'max num: {result.getMaxNum()}')
print(f'max num cnt: {result.getMaxNumCnt()}')
Q. 최솟값 알고리즘을 이용해서 숫자로 이루어진 리스트에서 최솟값과 최솟값의 개수를 찾는 모듈(리스트는 1-50까지 난수 30개 이용하되, 중복 허용)
<minMode 모듈>
class MinAlgorithm:
def __init__(self, ns):
self.nums = ns
self.minNum = 0
self.minNumCnt = 0
def setMinNum(self):
self.minNum = 51
for n in self.nums:
if self.minNum > n:
self.minNum = n
def getMinNum(self):
self.getMinNum()
return self.minNum
def setMinNumCnt(self):
self.setMinNum()
for n in self.nums:
if self.minNum == n:
self.minNumCnt += 1
def getMinNumCnt(self):
self.setMinNumCnt()
return self.minNumCnt
__________________________________________
<실행문>
import random
import minMod
if __name__ == '__main__':
nums = []
for n in range(30):
nums.append(random.randint(1, 50))
print(f'nums: {nums}')
ma = minMod.MinAlgorithm(nums)
print(f'min num: {ma.setMinNum()}')
print(f'min num cnt: {ma.getMinNumCnt()}')
Q. 회차별 로또 번호. 최빈도 알고리즘을 이용해서 모든 회차의 각각의 번호에 대한 빈도수를 출력
<mod 모듈>
class LottoMode:
def __init__(self, ln):
self.lottoNums = ln
self.modeList = [0 for n in range(1, 47)]
def getLottoNumMode(self):
for roundNums in self.lottoNums:
for num in roundNums:
self.modeList[num] = self.modeList[num] +1
return self.modeList
def printModeList(self):
if sum(self.modeList) == 0:
return None
for i, m in enumerate(self.modeList):
if i != 0:
print(f'번호: {i:>2}, 빈도: {m},{"*"* m}')
__________________________________________________________
<실행문>
import mod
lottoNums = [[13, 23,15, 5, 6, 39],[36, 13, 5, 3, 30, 16], [43, 1, 15, 9, 3, 38],
[32, 42, 24, 45, 8, 31], [18, 39, 41, 11, 4, 9], [12, 39, 11, 38, 32, 5],
[29, 25, 13, 6, 14, 8], [21, 33, 19, 20, 42, 7], [6, 28, 3, 45, 41, 24],
[42, 15, 8, 5, 35, 4], [14, 4, 35, 24, 29, 3], [15, 20, 6, 37, 34, 39],
[27, 5, 32, 15, 25, 19], [33, 28, 45, 21, 38, 24], [4, 30, 29, 28, 32, 38],
[25, 26, 45, 23, 24, 16], [33, 28, 45, 21, 38, 24], [4, 30, 29, 28, 32, 38],
[11, 28, 12, 2, 42, 3], [40, 29, 16, 8, 9, 28], [6, 9, 37, 30, 3, 35],
[29, 18, 41, 28, 38, 15], [9, 31, 13, 44, 1, 36], [36, 1, 37, 32, 15, 12],
[41, 32, 16, 6, 26, 33], [12, 43, 10, 29, 39, 9], [41, 9, 23, 35, 18, 17],
[35, 38, 3, 28, 36, 31], [21, 44, 4, 29, 18, 7], [20, 23, 6, 2, 34, 44]]
lm = mod.LottoMode(lottoNums)
mlist = lm.getLottoNumMode()
#print(f'mList: {mlist}')
lm.printModeList()
Q. 근삿값 알고리즘을 이용해서 수심을 입력하면 수온 출력하는 모듈
<mearMod 모듈>
class NearAlgorithm:
def __init__(self,d):
self.temps = {0:24, 5:22, 10:20, 15:16, 20:13, 25:10, 30:6}
self.depth = d
self.nearNum = 0
self.minNum = 24
def getNearNumbers(self):
for n in self.temps.keys():
absNum = abs(n - self.depth)
if absNum < self.minNum:
self.minNum = absNum
self.nearNum = n
return self.temps[self.nearNum]
________________________________________________________________
<실행문>
import mearMod
depth = int(float(input('input depth: ')))
print(f'depth: {depth}m')
na = mearMod.NearAlgorithm(depth)
temp = na.getNearNumbers()
print(f'water temperature: {temp}ºC')
Q. A상사의 2021년 월별 매출 증감액을 재귀 알고리즘을 이용하여 출력
sales = [1200, 1300, 12500, 11000, 10500, 98000, 91000, 91500, 10500, 11500, 12000, 12500]
def salesUpAndDown(ss):
if len(ss) == 1:
return ss
print(f'sales: {ss}')
currentSales = ss.pop(0) #12000 제거를해서 currentSales에 담아
nextSales = ss[0]
increase = nextSales - currentSales
if increase > 0:
increase = '+' + str(increase)
print(f'매출 증감액: {increase}')
return salesUpAndDown(ss)
if __name__ == '__main__':
salesUpAndDown(sales)
Q. 홍길동 학생을 제외한 나머지 학생의 평균과 홍길동 학생의 점수 차이 출력
kor_avg = 88; eng_avg = 82; mat_avg = 90; sci_avg = 78; his_avg = 92
hong_kor = 85; hong_eng = 90; hong_mat = 82; hong_sci = 88; hong_his = 100
stu19Cnt_kor_total = kor_avg * 20 - hong_kor
stu19Cnt_eng_total = kor_avg * 20 - hong_eng
stu19Cnt_mat_total = kor_avg * 20 - hong_mat
stu19Cnt_sci_total = kor_avg * 20 - hong_sci
stu19Cnt_his_total = kor_avg * 20 - hong_his
stu19Cnt_kor_avg = stu19Cnt_kor_total / 19
stu19Cnt_eng_avg = stu19Cnt_eng_total / 19
stu19Cnt_mat_avg = stu19Cnt_mat_total / 19
stu19Cnt_sci_avg = stu19Cnt_sci_total / 19
stu19Cnt_his_avg = stu19Cnt_his_total / 19
kor_gap = hong_kor - stu19Cnt_kor_avg
eng_gap = hong_eng - stu19Cnt_eng_avg
mat_gap = hong_mat - stu19Cnt_mat_avg
sci_gap = hong_sci - stu19Cnt_sci_avg
his_gap = hong_his - stu19Cnt_his_avg
print(f'국어점수 차이: {"+"+str(round(kor_gap, 2)) if kor_gap > 0 else round(kor_gap, 2)}')
print(f'영어점수 차이: {"+"+str(round(eng_gap, 2)) if eng_gap > 0 else round(eng_gap, 2)}')
print(f'수학점수 차이: {"+"+str(round(mat_gap, 2)) if mat_gap > 0 else round(mat_gap, 2)}')
print(f'과학점수 차이: {"+"+str(round(sci_gap, 2)) if sci_gap > 0 else round(sci_gap, 2)}')
print(f'역사점수 차이: {"+"+str(round(his_gap, 2)) if his_gap > 0 else round(his_gap, 2)}')
stu19Cnt_total = stu19Cnt_kor_avg + stu19Cnt_eng_avg + stu19Cnt_mat_avg + stu19Cnt_sci_avg + stu19Cnt_his_avg
stu19Cnt_avg = stu19Cnt_total / 5
hong_total = hong_kor + hong_eng + hong_mat + hong_sci + hong_his
hong_avg = hong_total / 5
avg_gap = round(hong_avg - stu19Cnt_avg, 2)
print(f'평균점수 차이: {"+"+str(round(avg_gap, 2)) if avg_gap>0 else round(avg_gap,2)}')