π‘ μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈμμ μ¬μ©μκ° μ λ ₯ν μ«μλ₯Ό κ²μνλ λͺ¨λμ λ€μ μ건μ λ°λΌ μμ±
1. κ²μ λͺ¨λμ μ ν κ²μ μκ³ λ¦¬μ¦μ μ΄μ©νμ.
2. 리μ€νΈλ 1λΆν° 20κΉμ§μ μ μ μ€μμ λμ 10κ°λ₯Ό μ΄μ©νμ.
3. κ²μ κ³Όμ μ λ‘κ·Έλ‘ μΆλ ₯νμ.
4. κ²μμ μ±κ³΅νλ©΄ ν΄λΉ μ μμ μΈλ±μ€λ₯Ό μΆλ ₯νκ³ , κ²μ κ²°κ³Όκ° μλ€λ©΄ β1μ μΆλ ₯νμ
# linear search νμΌ
class Search:
def __init__(self, nums, searchNum):
self.numbers = nums
self.searchNumber = searchNum
self.searchIdx = -1
def printNumbersAndSearchNumber(self):
print(f'Numbers : {self.numbers}')
print(f'Search Number : {self.searchNumber}')
def findSearchNum(self):
n = 0
while True:
if n == len(self.numbers):
self.searchIdx = -1
break
elif self.numbers[n] == self.searchNumber:
self.searchIdx = n
break
else:
n += 1
def getSearchResult(self):
if self.searchIdx == -1:
print('Search FAIL!')
print(f'Search result INDEX : {self.searchIdx}')
else:
print('Search SUCCESS!')
print(f'Search result INDEX : {self.searchIdx}')
print('>>> Search Result <<<')
print(f'search result index : {self.searchIdx}')
print(f'search result number : {self.searchNumber}')
# μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈμμ μ¬μ©μκ° μ
λ ₯ν μ«μλ₯Ό κ²μνλ λͺ¨λμ λ€μ μ건μ λ°λΌ μμ±
# 1. κ²μ λͺ¨λμ μ ν κ²μ μκ³ λ¦¬μ¦μ μ΄μ©νμ.
# 2. 리μ€νΈλ 1λΆν° 20κΉμ§μ μ μ μ€μμ λμ 10κ°λ₯Ό μ΄μ©νμ.
# 3. κ²μ κ³Όμ μ λ‘κ·Έλ‘ μΆλ ₯νμ.
# 4. κ²μμ μ±κ³΅νλ©΄ ν΄λΉ μ μμ μΈλ±μ€λ₯Ό μΆλ ₯νκ³ , κ²μ κ²°κ³Όκ° μλ€λ©΄ β1μ μΆλ ₯νμ
import random
import linearSearch
if __name__ == '__main__':
searchNumber = int(input('μ°ΎμΌλ €λ μ«μ μ
λ ₯ : '))
numbers = random.sample(range(1, 21),10)
sn = linearSearch.Search(numbers, searchNumber)
sn.printNumbersAndSearchNumber()
sn.findSearchNum()
sn.getSearchResult()
π‘ μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈμμ μ¬μ©μκ° μ λ ₯ν μ«μλ₯Ό κ²μνλ λͺ¨λμ λ€μ μ건μ λ°λΌ μμ±
1. κ²μ λͺ¨λμ μ΄μ§ κ²μ μκ³ λ¦¬μ¦μ μ΄μ©νμ.
2. 리μ€νΈλ [1, 2, 4, 6, 7, 8, 10, 11, 13, 15, 16, 17, 20, 21, 23, 24, 27, 28]λ₯Ό μ΄μ©νμ.
3. κ²μ κ³Όμ μ λ‘κ·Έλ‘ μΆλ ₯νμ.
4. κ²μμ μ±κ³΅νλ©΄ ν΄λΉ μ μμ μΈλ±μ€λ₯Ό μΆλ ₯νκ³ , κ²μ κ²°κ³Όκ° μλ€λ©΄ β1μ μΆλ ₯νμ
# binarySearch νμΌ
class Search():
def __init__(self,nums, searchNum):
self.searchNumber = searchNum
self.list = nums
self.searchNumberIdx = -1
self.midVal = 0
self.midIdx = 0
self.startIdx = 0
self.endIdx = len(self.list) -1
def sortNumber(self):
sorted(self.list)
def setMidNumberAndMidIdx(self):
self.midIdx = (self.startIdx + self.endIdx) // 2
self.midVal = self.list[self.midIdx]
print(f'staIdx : {self.startIdx}, endIdx : {self.endIdx}')
print(f'midIdx : {self.midIdx}, midVal : {self.midVal}')
def searchNum(self):
while self.list[0] <= self.searchNumber and self.list[len(self.list)-1] >= self.searchNumber:
if self.searchNumber == self.list[len(self.list)-1]:
self.searchNumberIdx = len(self.list)-1
print(f'staIdx : {self.startIdx}, endIdx : {self.endIdx}')
print(f'midIdx : {self.midIdx}, midVal : {self.midVal}')
break
elif self.searchNumber == self.midVal:
self.searchNumberIdx = self.midIdx
print(f'staIdx : {self.startIdx}, endIdx : {self.endIdx}')
print(f'midIdx : {self.midIdx}, midVal : {self.midVal}')
break
elif self.startIdx + 1 == self.endIdx: # 리μ€νΈ λ΄μ μ«μκ° μμ κ²½μ° β
β
β
β
β
if self.list[self.startIdx] != self.searchNumber and self.list[self.endIdx] != self.searchNumber:
break
elif self.searchNumber > self.midVal:
self.startIdx = self.midIdx
self.midIdx = (self.startIdx + self.endIdx) // 2
self.midVal = self.list[self.midIdx]
print(f'+staIdx : {self.startIdx}, endIdx : {self.endIdx}')
print(f'-midIdx : {self.midIdx}, midVal : {self.midVal}')
elif self.searchNumber < self.midVal:
self.endIdx = self.midIdx
self.midIdx = (self.startIdx + self.endIdx) // 2
self.midVal = self.list[self.midIdx]
print(f'-staIdx : {self.startIdx}, endIdx : {self.endIdx}')
print(f'+midIdx : {self.midIdx}, midVal : {self.midVal}')
return self.midIdx
def printResult(self):
print(f'nums : {self.list}')
if self.searchNumberIdx == -1:
print('No results found')
print(f'search result index : {self.searchNumberIdx}')
else:
print('>>> Search Results <<<')
print(f'search result index : {self.searchNumberIdx}')
print(f'search result number : {self.searchNumber}')
# μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈμμ μ¬μ©μκ° μ
λ ₯ν μ«μλ₯Ό κ²μνλ λͺ¨λμ λ€μ μ건μ λ°λΌ μμ±
#1. κ²μ λͺ¨λμ μ΄μ§ κ²μ μκ³ λ¦¬μ¦μ μ΄μ©νμ.
#2. 리μ€νΈλ [1, 2, 4, 6, 7, 8, 10, 11, 13, 15, 16, 17, 20, 21, 23, 24, 27, 28]λ₯Ό μ΄μ©νμ.
#3. κ²μ κ³Όμ μ λ‘κ·Έλ‘ μΆλ ₯νμ.
#4. κ²μμ μ±κ³΅νλ©΄ ν΄λΉ μ μμ μΈλ±μ€λ₯Ό μΆλ ₯νκ³ , κ²μ κ²°κ³Όκ° μλ€λ©΄ β1μ μΆλ ₯νμ
import binarySearch
if __name__ == '__main__':
nums = [1, 2, 4, 6, 7, 8, 10, 11, 13, 15, 16, 17, 20, 21, 23, 24, 27, 28]
inputNumber = int(input('input search number : '))
isn = binarySearch.Search(nums, inputNumber)
isn.sortNumber()
isn.setMidNumberAndMidIdx()
isn.searchNum()
isn.printResult()
π‘ μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈμμ μμ΄ν μ μμλ₯Ό μΆλ ₯νκ³ , μμμ λ°λΌ μμ΄ν μ μ λ ¬νλ λͺ¨λμ μμ±. 리μ€νΈλ 50λΆν° 100κΉμ§μ λμ 20κ°λ₯Ό μ΄μ©
# rank νμΌ
def rank(ns):
ranks = [0 for i in range(len(ns))]
for idx, n1 in enumerate(ns):
for n2 in ns:
if n1 < n2:
ranks[idx] += 1
print(f'nums : {ns}')
print(f'rank : {ranks}')
for i, n in enumerate(ns):
print(f'num : {n} \t rank : {ranks[i]}')
sortedNum = [0 for n in range(len(ns))] # β
β
β
β
β
for idx, rank in enumerate(ranks):
sortedNum[rank] = ns[idx]
return sortedNum
# μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈμμ μμ΄ν
μ μμλ₯Ό μΆλ ₯νκ³ , μμμ λ°λΌ μμ΄ν
μ
# μ λ ¬νλ λͺ¨λμ μμ±. 리μ€νΈλ 50λΆν° 100κΉμ§μ λμ 20κ°λ₯Ό μ΄μ©
import random
import rank
if __name__ == '__main__':
nums = random.sample(range(50, 101),20)
sNums = rank.rank(nums)
print(f'sNum : {sNums}')
μνλ²³ λ¬Έμλ€κ³Ό μ μλ€μ λν μμλ₯Ό μ νλ νλ‘κ·Έλ¨μ μμ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμ±.
λ¨, μνλ²³μ μμ€ν€μ½λ κ°μ μ΄μ©
# μνλ²³ λ¬Έμλ€κ³Ό μ μλ€μ λν μμλ₯Ό μ νλ νλ‘κ·Έλ¨μ μμ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμ±
# λ¨, μνλ²³μ μμ€ν€μ½λ κ°μ μ΄μ©
def rankAlgorithm(datas):
ascIIDatas = []
ranks = [0 for i in range(len(datas))]
print(f'Datas : {datas}')
for data in datas:
if str(type(data)) == '<class \'int\'>':
ascIIDatas.append(data)
else:
ascIIDatas.append(ord(data))
print(f'ascIIDatas : {ascIIDatas}')
for idx,data1 in enumerate(ascIIDatas):
for data2 in ascIIDatas:
if data1 < data2:
ranks[idx] += 1
print(f'ranks : {ranks}')
for idx, data in enumerate(datas):
print(f'data : {data}\t\t rank : {ranks[idx]+1}')
return ascIIDatas
datas = [32, 'a', 'z', 45, 'G', 39, 50, 'T', 't', 22, 31, 55, 's', 63, 59, 'E']
rankAlgorithm(datas)
π‘ μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈλ₯Ό λ²λΈμ λ ¬ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ€λ¦μ°¨μκ³Ό λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ λͺ¨λμ μμ±.(λ¨ μ λ ¬νλ κ³Όμ λ μΆλ ₯νλλ‘ νλ€.)
# bubbleMod νμΌ
import copy
def bubbleSort(nums, asc = True):
c_nums = copy.copy(nums)
length = len(c_nums)-1
for i in range(length):
for j in range(length-i):
if asc:
if c_nums[j] > c_nums[j+1]:
c_nums[j],c_nums[j+1] = c_nums[j+1], c_nums[j]
else:
if c_nums[j] < c_nums[j + 1]:
c_nums[j], c_nums[j + 1] = c_nums[j + 1], c_nums[j]
print(f'sorting nums : {c_nums}')
print()
return c_nums
# μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈλ₯Ό λ²λΈμ λ ¬ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ€λ¦μ°¨μκ³Ό
# λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ λͺ¨λμ μμ±.(λ¨ μ λ ¬νλ κ³Όμ λ μΆλ ₯νλλ‘ νλ€.)
import random
import bubbleMod
if __name__ == '__main__':
nums = random.sample(range(1, 20), 10)
print(f'not sorted nums : {nums}')
result = bubbleMod.bubbleSort(nums)
print(f'sorted nums by ASC : {result}')
print()
result = bubbleMod.bubbleSort(nums, asc=False)
print(f'sorted nums by DESC : {result}')
π‘ μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈλ₯Ό μ½μ μ λ ¬ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ€λ¦μ°¨μκ³Ό λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ λͺ¨λμ μμ±.(λ¨ μ λ ¬νλ κ³Όμ λ μΆλ ₯νλλ‘ νλ€)
# insertMod νμΌ
import copy
def sortInsertAlgorithm(ns, asc = True):
c_ns = copy.copy(ns)
for i1 in range(1, len(c_ns)):
i2 = i1 -1
currNum = c_ns[i1]
if asc: #asc
while c_ns[i2] > currNum and i2 >= 0:
c_ns[i2 + 1] = c_ns[i2]
i2 -= 1
else: #desc
while c_ns[i2] < currNum and i2 >= 0:
c_ns[i2 + 1] = c_ns[i2]
i2 -= 1
c_ns[i2 +1] = currNum
print(f'c_ns : {c_ns}')
return c_ns
# μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈλ₯Ό μ½μ
μ λ ¬ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ€λ¦μ°¨μκ³Ό
# λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ λͺ¨λμ μμ±.(λ¨ μ λ ¬νλ κ³Όμ λ μΆλ ₯νλλ‘ νλ€)
import random
import insertMod
if __name__ == '__main__':
nums = random.sample(range(1, 21),10)
print(f'not sorted nums : {nums}')
result = insertMod.sortInsertAlgorithm(nums)
print(f'sorted nums by ASC: {result}')
print(f'not sorted nums : {nums}')
result = insertMod.sortInsertAlgorithm(nums, asc=False)
print(f'sorted nums by DESC: {result}')
π‘ μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈλ₯Ό μ νμ λ ¬ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ€λ¦μ°¨μκ³Ό λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ λͺ¨λμ μμ±.(λ¨ μ λ ¬νλ κ³Όμ λ μΆλ ₯νλλ‘ νλ€.)
# selectMod νμΌ
import copy
def sortSelectAlgorithm(ns, asc = True):
c_ns = copy.copy(ns)
for i in range(len(c_ns)-1):
minIdx = i
for j in range(i+1, len(c_ns)):
if asc:
if c_ns[minIdx] > c_ns[j]:
minIdx = j # iκ°μ λΉΌκ³ λλ¨Έμ§ κ°λ€ μ€μ λ μμ κ°μ μ°Ύμλ€ minidxλ₯Ό μ°Ύμ λκΉμ§ λΉκ΅ν΄λ΄
else:
if c_ns[minIdx] < c_ns[j]:
minIdx = j
c_ns[i], c_ns[minIdx] = c_ns[minIdx], c_ns[i]
print(c_ns)
# μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈλ₯Ό μ νμ λ ¬ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ€λ¦μ°¨μκ³Ό
# λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ λͺ¨λμ μμ±.(λ¨ μ λ ¬νλ κ³Όμ λ μΆλ ₯νλλ‘ νλ€.)
import random
import selectMod
if __name__ == '__main__':
nums = random.sample(range(1, 21), 10)
print(f'not sorted nums : \n{nums}')
print()
result = selectMod.sortSelectAlgorithm(nums)
print(f'sorted nums by ASC : \n{nums}')
print()
print(f'not sorted nums : \n{nums}')
result = selectMod.sortSelectAlgorithm(nums, asc = False)
print(f'sorted nums by ASC : \n{nums}')
π‘ μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈλ₯Ό λ³ν©μ λ ¬ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ€λ¦μ°¨μκ³Ό λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ λͺ¨λμ μμ±.(λ¨ μ λ ¬νλ κ³Όμ λ μΆλ ₯νλλ‘ νλ€.)
# mergeSort νμΌ
import copy
def sortMergeAlgorithm(ns, asc = True):
c_ns = copy.copy(ns)
if len(c_ns) < 2:
return c_ns
midIdx = len(c_ns) // 2
leftNums = sortMergeAlgorithm(c_ns[0:midIdx], asc=asc)
rightNums = sortMergeAlgorithm(c_ns[midIdx:len(c_ns)], asc=asc)
mergeNums = []
leftIdx = 0; rightIdx = 0
while leftIdx < len(leftNums) and rightIdx < len(rightNums):
if asc:
if leftNums[leftIdx] < rightNums[rightIdx]:
mergeNums.append(leftNums[leftIdx])
leftIdx += 1
else:
mergeNums.append(rightNums[rightIdx])
rightIdx += 1
else:
if leftNums[leftIdx] > rightNums[rightIdx]:
mergeNums.append(leftNums[leftIdx])
leftIdx += 1
else:
mergeNums.append(rightNums[rightIdx])
rightIdx += 1
mergeNums = mergeNums + leftNums[leftIdx:]
mergeNums = mergeNums + rightNums[rightIdx:]
print(f'mergeNums : {mergeNums}')
return mergeNums
# μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈλ₯Ό λ³ν©μ λ ¬ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ€λ¦μ°¨μκ³Ό
# λ΄λ¦Όμ°¨μμΌλ‘ μ λ ¬νλ λͺ¨λμ μμ±.(λ¨ μ λ ¬νλ κ³Όμ λ μΆλ ₯νλλ‘ νλ€.)
import random
import mergeSort
nums = random.sample(range(0, 101),20)
print(f'not sorted rNums : {nums}')
result = mergeSort.sortMergeAlgorithm(nums)
print(f'sorted rNums by ASC : {result}')
print()
print(f'not sorted rNums : {nums}')
result = mergeSort.sortMergeAlgorithm(nums, asc=False)
print(f'sorted rNums by DESC : {result}')
π‘ μ΅λκ° μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈμμ μ΅λκ°κ³Ό μ΅λκ°μ κ°μλ₯Ό μ°Ύλ λͺ¨λμ μμ± (리μ€νΈλ 1λΆν° 50κΉμ§μ λμ 30κ°λ₯Ό μ΄μ©νλ, μ€λ³΅μ΄ νμ©λλλ‘ νλ€.)
# maxAlgorithm νμΌ
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
# μ΅λκ° μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈμμ μ΅λκ°κ³Ό μ΅λκ°μ κ°μλ₯Ό μ°Ύλ λͺ¨λμ μμ±
# (리μ€νΈλ 1λΆν° 50κΉμ§μ λμ 30κ°λ₯Ό μ΄μ©νλ, μ€λ³΅μ΄ νμ©λλλ‘ νλ€.)
import random
import maxAlgorithm
if __name__ == '__main__':
nums = []
for n in range(30):
nums.append(random.randint(1, 50))
print(f'nums : {nums}')
result = maxAlgorithm.MaxAlgorithm(nums)
result.setMaxNum()
result.setMaxNumCnt()
print(f'max num : {result.getMaxNum()}')
print(f'max num cnt : {result.getMaxNumCnt()}')
νκΈ μ 체 νμμ μν μ μμ λν νκ· κ³Ό μ΅λκ°μ ꡬνκ³ νκ· κ³Ό μ΅λκ°μ νΈμ°¨λ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μ΅λκ° μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμ±
# νκΈ μ 체 νμμ μν μ μμ λν νκ· κ³Ό μ΅λκ°μ ꡬνκ³ νκ· κ³Ό μ΅λκ°μ
# νΈμ°¨λ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μ΅λκ° μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμ±
def maxAlgorithm(nums):
nums = nums
avgScore = 0
maxScore = nums[0]
sumScore = 0
maxDeviation = 0
avgDeviation = 0
for n in nums:
sumScore += n
if maxScore < n:
maxScore = n
avgScore = round(sumScore / len(nums), 2)
print(f'νκ· : {avgScore}')
print(f'μ΅λκ° : {maxScore}')
for n in nums:
maxDeviation = n - maxScore
avgDeviation = n - avgScore
print(f'νκ· κ³Όμ νΈμ°¨ : {round(avgDeviation,2)},\t μ΅λκ°μ νΈμ°¨ : {maxDeviation}')
students = [100, 64, 94, 66, 75, 58, 99, 76, 96, 75, 54, 73, 88, 70, 68, 50, 95, 89, 69, 98]
maxAlgorithm(students)
μ΅μκ° μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈμμ μ΅μκ°κ³Ό μ΅μκ°μ κ°μλ₯Ό μ°Ύλ λͺ¨λμ μμ±
(리μ€νΈλ 1λΆν° 50κΉμ§μ λμ 30κ°λ₯Ό μ΄μ©νλ, μ€λ³΅μ΄ νμ©λλλ‘ νλ€.)
# minAlgorithm νμΌ
class MinAlgorithm:
def __init__(self, nums):
self.nums = nums
self.minNum = 0
self.minNumCnt = 0
def setMinNum(self):
self.minNum = self.nums[0]
for num in self.nums:
if self.minNum > num:
self.minNum = num
def getMinNum(self):
self.setMinNum()
return self.minNum
def setMinNumCnt(self):
for num in self.nums:
if self.minNum == num:
self.minNumCnt += 1
def getMinNumCnt(self):
self.setMinNumCnt()
return self.minNumCnt
# μ΅μκ° μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μ«μλ‘ μ΄λ£¨μ΄μ§ 리μ€νΈμμ μ΅μκ°κ³Ό μ΅μκ°μ κ°μλ₯Ό μ°Ύλ λͺ¨λμ μμ±
# (리μ€νΈλ 1λΆν° 50κΉμ§μ λμ 30κ°λ₯Ό μ΄μ©νλ, μ€λ³΅μ΄ νμ©λλλ‘ νλ€.)
import random
import minAlgorithm
if __name__ == '__main__':
nums = []
for i in range(30):
nums.append(random.randint(1, 50))
print(f'nums : {nums}')
mn = minAlgorithm.MinAlgorithm(nums)
print(f'min num : {mn.getMinNum()}')
print(f'min num count : {mn.getMinNumCnt()}')
νκΈ μ 체 νμμ μν μ μμ λν νκ· κ³Ό μ΅μκ°μ ꡬνκ³ νκ· κ³Ό μ΅μκ°μ νΈμ°¨λ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μ΅μκ° μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμ±
# νκΈ μ 체 νμμ μν μ μμ λν νκ· κ³Ό μ΅μκ°μ ꡬνκ³ νκ· κ³Ό μ΅μκ°μ
# νΈμ°¨λ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μ΅μκ° μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμ±
def minAlgorithm(nums):
nums = nums
minScore = nums[0]
sumScore = 0
avgScore = 0
minDiviation = 0
avgDeviation = 0
for num in nums:
sumScore += num
if minScore > num:
minScore = num
avgScore = round(sumScore / len(nums),2)
print(f'νκ· : {avgScore}, μ΅μκ° : {minScore}')
for num in nums:
minDiviation = num - minScore
avgDeviation = num - avgScore
print(f'[{num} μ ] : νκ· μ νΈμ°¨ : {round(avgDeviation,2)}, μ΅μκ°μ νΈμ°¨ : {minDiviation}')
students = [100, 64, 94, 66, 75, 58, 99, 76, 96, 75, 54, 73, 88, 70, 68, 50, 95, 89, 69, 98]
minAlgorithm(students)
π‘ λ€μμ μ΄λ€ νμ¬μ μ μ§μ λμ΄λ₯Ό λνλ΄λ 리μ€νΈμ΄λ€. μ΅λΉκ° μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ λμ΄ λΆν¬λ₯Ό κ°λ¨ν κ·Έλνλ‘ μΆλ ₯νλ λͺ¨λμ μμ±
# maxAlgorithm2 νμΌ
class MaxAlgorithm:
def __init__(self, ns):
self.nums = ns
self.maxNum = 0
self.maxIdx = 0
def setMaxIdxAndMaxNum(self):
self.maxNum = 0
self.maxIdx = 0
for idx, num in enumerate(self.nums):
if self.maxNum < num:
self.maxNum = num
self.maxIdx = idx
def getMaxNum(self):
return self.maxNum
def getMaxIdx(self):
return self.maxIdx
# modeAlgorithm νμΌ
import maxAlgorithm2
class ModeAlgorithm:
def __init__(self, nums, mn):
self.nums = nums
self.maxNum = mn
self.indexes = []
def setIndexList(self):
self.indexes = [0 for i in range(self.maxNum+1)]
for n in self.nums:
self.indexes[n] += 1
def getIndexList(self):
if sum(self.indexes) == 0:
return None
else:
return self.indexes
def printAges(self):
n = 1
while True:
maxAlo = maxAlgorithm2.MaxAlgorithm(self.indexes)
maxAlo.setMaxIdxAndMaxNum()
maxNum = maxAlo.getMaxNum()
maxNumIdx = maxAlo.getMaxIdx()
if maxNum == 0: # indexes μμ λͺ¨λ κ°μ΄ 0 μ΄λ κ²½μ° whileλ¬Έ λμ΄
break
print(f'[{n:0>3}] {maxNumIdx}μΈ λΉλμ : {maxNum} \t', end='') # n:0>3 : 3κ°μ μ리λ₯Ό λ§λ€μ΄ κ°μ μ
λ ₯νλλ° λΉ μ리λ 0μΌλ‘ μ±μ β
β
β
β
β
print(f'+'*maxNum)
self.indexes[maxNumIdx] = 0 # κ°μ₯ ν° κ°μ 0μΌλ‘ λ§λ€κ³ κ·Έ λ€μ ν°κ°μ λ°λ³΅μ μΌλ‘ ꡬνκΈ° μν΄
n += 1
# λ€μμ μ΄λ€ νμ¬μ μ μ§μ λμ΄λ₯Ό λνλ΄λ 리μ€νΈμ΄λ€. μ΅λΉκ° μκ³ λ¦¬μ¦μ
# μ΄μ©ν΄μ λμ΄ λΆν¬λ₯Ό κ°λ¨ν κ·Έλνλ‘ μΆλ ₯νλ λͺ¨λμ μμ±
import maxAlgorithm2
import modeAlgorithm
ageList = [25, 27, 27, 24, 31, 34, 33, 31, 29, 25,
45, 37, 38, 46, 47, 22, 24, 29, 33, 35,
27, 34, 37, 40, 42, 29, 27, 25, 26, 27,
31, 31, 32, 38, 25, 27, 28, 40, 41, 34]
print(f'emplyee cnt : {len(ageList)}')
maxAlo = maxAlgorithm2.MaxAlgorithm(ageList)
maxAlo.setMaxIdxAndMaxNum()
maxAge = maxAlo.getMaxNum()
maxAgeIdx = maxAlo.getMaxIdx()
print(f'maxAge : {maxAge}')
modAlo = modeAlgorithm.ModeAlgorithm(ageList, maxAge)
modAlo.setIndexList()
modAlo.getIndexList()
print(f'IndexList : {modAlo.getIndexList()}')
modAlo.printAges()
π‘ λ€μμ νμ°¨λ³ λ‘λ λ²νΈμ΄λ€. μ΅λΉλ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ λͺ¨λ νμ°¨μ κ°κ°μ λ²νΈμ λν λΉλμλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±
# lottoMaxAlgorithm νμΌ
class MaxAlgorithm:
def __init__(self, nums):
self.nums = nums
self.maxNumIdx = 0
self.maxNum = 0
def setMaxNumAndMaxNumIdx(self):
self.maxNum = self.nums[0]
self.maxNumIdx = 0
for idx, num in enumerate(self.nums):
if self.maxNum < num:
self.maxNum = num
self.maxNumIdx = idx
def getMaxNum(self):
self.setMaxNumAndMaxNumIdx()
return self.maxNum
def getMaxNumIdx(self):
self.setMaxNumAndMaxNumIdx()
return self.maxNumIdx
# lottoModeAlgorithm νμΌ
class ModeAlgorithm:
def __init__(self, nums, maxnum):
self.nums = nums
self.maxNum = maxnum
self.indexes = []
def setIndexes(self):
self.indexes = [0 for i in range(self.maxNum+1)]
def getIndexes(self):
self.setIndexes()
return self.indexes
def setMode(self):
self.setIndexes()
for num in self.nums:
self.indexes[num] += 1
return self.indexes
def printModeNumber(self):
self.setIndexes()
self.setMode()
for idx, num in enumerate(self.indexes):
if idx != 0:
print(f'λ²νΈ : {idx}\t, λΉλ : {num},\t', end='')
print('*'*num)
# λ€μμ νμ°¨λ³ λ‘λ λ²νΈμ΄λ€. μ΅λΉλ μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ λͺ¨λ νμ°¨μ κ°κ°μ
# λ²νΈμ λν λΉλμλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±
import lottoMaxAlgorithm
import lottoModeAlgorithm
lotto = [[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]]
lotto2 = []
for list in lotto:
for num in list:
lotto2.append(num)
print(f'lotto : {lotto2}')
lt = lottoMaxAlgorithm.MaxAlgorithm(lotto2)
maxNum = lt.getMaxNum()
print(f'max number : {maxNum}')
print(f'max number idx : {lt.getMaxNumIdx()}')
index = lottoModeAlgorithm.ModeAlgorithm(lotto2,maxNum)
#print(index.setMode())
index.printModeNumber()
π‘ λ€μ νλ μμ¬μ λ°λ₯Έ μμ¨μ λνλ΄κ³ μλ€. κ·Όμ¬κ° μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμ¬μ μ λ ₯νλ©΄ μμ¨μ μΆλ ₯νλ λͺ¨λ μμ±
# near νμΌ
class near:
def __init__(self, num):
self.num = num
self.depth = {}
self.diff = 0
self.nearNum = 0
self.nearNum2 = 0
def setDepthAndTemperatur(self):
self.depth = {0: 24, 5: 22, 10: 20, 15: 16, 20: 13, 25: 10, 30: 6}
self.diff = 30
self.temp = 6
def setNearNum(self):
self.setDepthAndTemperatur()
#λ΄κ° ν κ²
# for dp, temperatur in self.depth.items(): # β
# absVal = abs(self.num - dp)
#
# if self.diff > absVal:
# self.diff = absVal
# self.nearNum = temperatur
# return self.nearNum
for n in self.depth.keys(): #λ΄κ° ν κ²μ λλ¦¬κ³ μΆμ λλ μ£Όμμ²λ¦¬ νμ
absNum = abs(n - self.num)
if absNum < self.diff:
self.diff = absNum
self.nearNum = n
self.nearNum2 = self.depth[self.nearNum]
return self.nearNum2
def printResult(self):
#self.setDepthAndTemperatur()
self.setNearNum()
print(f'depth : {self.num} m')
#print(f'water temperature : {self.nearNum} λ') #λ΄κ° ν κ²κ³Ό κ°μ΄ ν΄μΌ ν¨
print(f'water temperature : {self.nearNum2} λ') #λ΄κ° ν κ²μ λλ¦¬κ³ μΆμ λλ μ£Όμμ²λ¦¬ νμ
# λ€μ νλ μμ¬μ λ°λ₯Έ μμ¨μ λνλ΄κ³ μλ€. κ·Όμ¬κ° μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμ¬μ
# μ
λ ₯νλ©΄ μμ¨μ μΆλ ₯νλ λͺ¨λ μμ±
import near
inputDepth = int(float(input('input depth : '))) #int(float())μ νλ©΄ μ€μνμ΄ μ
λ ₯ λμμ λ intνμΌλ‘ λ³ν κ°λ₯ β
id = near.near(inputDepth)
id.printResult()
π‘ μ¬μ©μμ λͺΈλ¬΄κ²(kg)μ ν€(m)λ₯Ό μ λ ₯νλ©΄ 체μ§λμ§μ(BMI)λ₯Ό κ³μ°νκ³ , κ·ΌμΏκ° μκ³ λ¦¬μ¦κ³Ό BMIνλ₯Ό μ΄μ©ν΄μ μ 체 μνλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±
# nearMod νμΌ
class BmiAlgorithm:
def __init__(self, w, h):
self.BMISection = {18.5:['μ 체μ€','μ μ'],
23:['μ μ','κ³Όμ μΆ©'],
25:['과체μ€','λΉλ§']}
self.userWeight = w
self.userHeight = h
self.userBMI = 0
self.userCondition = ''
self.nearNum = 0
self.minNum = 25
def calculatorBMI(self):
# λͺΈλ¬΄κ² / ν€^2
self.userBMI = round(self.userWeight / (self.userHeight * self.userHeight),2)
print(f'userBMI : {self.userBMI}')
def printUserCondition(self):
for n in self.BMISection.keys():
absNum = abs(n - self.userBMI)
if absNum < self.minNum:
self.minNum = absNum
self.nearNum = n
print(f'self.nearNum : {self.nearNum}')
if self.userBMI < self.nearNum:
self.userCondition = self.BMISection[self.nearNum][0] # bmi κΈ°μ€ κ°λ³΄λ€ μμΌλ©΄ 0λ²μ§Έ μΈλ±μ€
else:
self.userCondition = self.BMISection[self.nearNum][1]
print(f'self.userCondition : {self.userCondition}')
# μ¬μ©μμ λͺΈλ¬΄κ²(kg)μ ν€(m)λ₯Ό μ
λ ₯νλ©΄ 체μ§λμ§μ(BMI)λ₯Ό κ³μ°νκ³ , κ·ΌμΏκ°
# μκ³ λ¦¬μ¦κ³Ό BMIνλ₯Ό μ΄μ©ν΄μ μ 체 μνλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±
import nearMod
uWeight = float(input('input weight(kg) : '))
uHeight = float(input('input height(m) : '))
na = nearMod.BmiAlgorithm(uWeight,uHeight)
na.calculatorBMI()
na.printUserCondition()
π‘ λ€μμ βAμμ¬βμ 2021λ μλ³ λ§€μΆμ λνλ΄λ νμ΄λ€. μ¬κ· μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ 1μλΆν° 12μκΉμ§ μ μλλΉ λ§€μΆ μ¦κ°μ‘μ λνλ΄λ νλ‘κ·Έλ¨μ μμ±
# λ€μμ βAμμ¬βμ 2021λ
μλ³ λ§€μΆμ λνλ΄λ νμ΄λ€. μ¬κ· μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ
# 1μλΆν° 12μκΉμ§ μ μλλΉ λ§€μΆ μ¦κ°μ‘μ λνλ΄λ νλ‘κ·Έλ¨μ μμ±
def salesUpAndDown(ss):
if len(ss) == 1:
return ss
print(f'sales : {ss}')
currentSales = ss.pop(0)
nextSales = ss[0]
increase = nextSales - currentSales
if increase > 0:
increase = '+' + str(increase)
print(f'λ§€μΆ μ¦κ°μ‘ : {increase}')
return salesUpAndDown(ss) # popμΌλ‘ ss 리μ€νΈμ μ κ°μ μμ νκ±Έ λ€μ λΆλ¦
if __name__ == '__main__':
sales = [12000, 13000, 12500, 11000, 10500, 98000, 91000, 91500, 10500, 11500, 12000, 12500]
salesUpAndDown(sales)
π‘ μ¬μ©μκ° μ μ λκ°λ₯Ό μ λ ₯νλ©΄ μμ μ μμ ν° μ μ μ¬μ΄μ λͺ¨λ μ μμ ν©μ ꡬνλ νλ‘κ·Έλ¨μ μ¬κ· μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμ±
# mod νμΌ
class NumsSum:
def __init__(self, n1, n2):
self.bigNum = 0
self.smallNum = 0
self.setM1M2(n1, n2) # β
β
β
def setM1M2(self, n1, n2):
self.bigNum = n1
self.smallNum = n2
if n1 < n2:
self.bigNum = n2
self.smallNum = n1
def addNum(self, n):
if n <= 1:
return n
return n + self.addNum(n-1)
def sumBetweenNums(self):
return self.addNum(self.bigNum-1) - self.addNum(self.smallNum) # β
# μ¬μ©μκ° μ μ λκ°λ₯Ό μ
λ ₯νλ©΄ μμ μ μμ ν° μ μ μ¬μ΄μ λͺ¨λ μ μμ ν©μ ꡬνλ
# νλ‘κ·Έλ¨μ μ¬κ· μκ³ λ¦¬μ¦μ μ΄μ©ν΄μ μμ±
import mod
if __name__ == '__main__':
num1 = int(input(f'input number1 : '))
num2 = int(input(f'input number2 : '))
ns = mod.NumsSum(num1, num2)
result = ns.sumBetweenNums()
print(f'result : {result}')
π‘ λ€μμ μ΄λ€ 체쑰μ μμ κ²½κΈ° μ μμ΄λ€. μ΅λκ°κ³Ό μ΅μκ°μ μ μΈν λλ¨Έμ§ μ μμ λν νκ· μ ꡬνκ³ μμλ₯Ό μ νλ μκ³ λ¦¬μ¦μ μμ±
# maxAlgorithm3 νμΌ
class MaxAlgorithm:
def __init__(self, ss):
self.scores = ss
self.maxScore = 0
self.maxScoreIdx = 0
def removeMaxScore(self):
self.maxScore = self.scores[0] # λ¨Όμ 첫λ²μ§Έκ° μ€μ
for idx, score in enumerate(self.scores):
if self.maxScore < score:
self.maxScore = score
self.maxScoreIdx = idx
print(f'self.maxScore : {self.maxScore}')
print(f'self.maxScoreIdx : {self.maxScoreIdx}')
self.scores.pop(self.maxScoreIdx)
print(f'self.scores : {self.scores}')
# minAlgorithm3 νμΌ
class MinAlgorithm:
def __init__(self, ss):
self.scores = ss
self.minScore = 0
self.minScoreIdx = 0
def removeMinScore(self):
self.minScore = self.scores[0] # λ¨Όμ 첫λ²μ§Έκ° μ€μ
for idx, score in enumerate(self.scores):
if self.minScore > score:
self.minScore = score
self.minScoreIdx = idx
print(f'self.maxScore : {self.minScore}')
print(f'self.maxScoreIdx : {self.minScoreIdx}')
self.scores.pop(self.minScoreIdx)
print(f'self.scores : {self.scores}')
# nearAlgorithm νμΌ
class Top5Player:
def __init__(self, cts, ns):
self.currentScores = cts
self.newScores = ns
def setAlignScores(self):
nearIdx = 0
minNum = 10.0 # κ°μ₯ ν° κ°μΌλ‘ μ°μ μ€μ
for idx, score in enumerate(self.currentScores):
absNum = abs(self.newScores - score)
if absNum < minNum:
minNum = absNum #κ·Όμ¬κ°
nearIdx = idx
if self.newScores >= self.currentScores[nearIdx]: #κ·Όμ¬κ°λ³΄λ€ ν° κ²½μ°
for i in range(len(self.currentScores) -1, nearIdx, -1): #λμμ κ·Όμ¬κ° μ κΉμ§
self.currentScores[i] = self.currentScores[i-1] # β
self.currentScores[nearIdx] = self.newScores # κ·Όμ¬κ°μ μλ‘μ΄ μ μ μ
λ ₯
else:
for i in range(len(self.currentScores) -1, nearIdx+1, -1):
# λμμ κ·Όμ¬κ° λ€μκΉμ§, κ·Όμ¬κ° μμΉμ νμ¬ κ°μ λ£μκ±°κ³ μ΄κ±΄ κ·Έ μ΄ν κ°μ λ£κΈ° μν΄
self.currentScores[i] = self.currentScores[i-1] # β
self.currentScores[nearIdx+1] = self.newScores # κ·Όμ¬κ° λ€μμ μλ‘μ΄ μ μ μ
λ ₯ β
β
β
β
β
def getFinalTop5Scores(self):
return self.currentScores
λ€μμ νκΈΈλ νμμ ν¬ν¨ν νκΈ μ 체 νμμ μν μ μ νκ· μ λνλΈ νμ΄λ€. νλ₯Ό λ³΄κ³ , νκΈΈλ νμμ μ μΈν λλ¨Έμ§ νμμ νκ· κ³Ό νκΈΈλ νμμ μ μμ μ°¨μ΄λ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±.(μΆλ ₯μ κ³Όλͺ©λ³ μ μμ νκ· μ μλ₯Ό λͺ¨λ μΆλ ₯νλ€.)
# λ€μμ νκΈΈλ νμμ ν¬ν¨ν νκΈ μ 체 νμμ μν μ μ νκ· μ λνλΈ νμ΄λ€.
# νλ₯Ό λ³΄κ³ , νκΈΈλ νμμ μ μΈν λλ¨Έμ§ νμμ νκ· κ³Ό νκΈΈλ νμμ μ μμ μ°¨μ΄λ₯Ό
# μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±.(μΆλ ₯μ κ³Όλͺ©λ³ μ μμ νκ· μ μλ₯Ό λͺ¨λ μΆλ ₯νλ€.)
kor_avg = 88; eng_avg = 82; mat_avg = 90
sci_avg = 78; his_avg = 92
hong_kor_score = 85; hong_eng_score = 90; hong_mat_score = 82
hong_sci_score = 88; hong_his_score = 100
stu19Cnt_kor_total = kor_avg * 20 - hong_kor_score
stu19Cnt_eng_total = eng_avg * 20 - hong_eng_score
stu19Cnt_mat_total = mat_avg * 20 - hong_mat_score
stu19Cnt_sci_total = sci_avg * 20 - hong_sci_score
stu19Cnt_his_total = his_avg * 20 - hong_his_score
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_score - stu19Cnt_kor_avg
eng_gap = hong_eng_score - stu19Cnt_eng_avg
mat_gap = hong_mat_score - stu19Cnt_mat_avg
sci_gap = hong_sci_score - stu19Cnt_sci_avg
his_gap = hong_his_score - 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_score + hong_eng_score + hong_mat_score + hong_sci_score + hong_his_score
hong_avg = hong_total / 5
avg_gap = round(hong_avg - stu19Cnt_avg, 2)
print(f'νκ· μ°¨μ΄ : {"+" + str(avg_gap) if his_gap > 0 else avg_gap}')
π» μΆμ² : μ λ‘λ² μ΄μ€ λ°μ΄ν° μ·¨μ μ€μΏ¨