😒 μŠ€ν„°λ””λ…ΈνŠΈ(μ•Œκ³ λ¦¬μ¦˜ λ¬Έμ œν’€μ΄ 1~5)

zoeΒ·2023λ…„ 3μ›” 23일
0

κΌ­κΌ­ λ‹€μ‹œν’€μ–΄λ³΄κΈ°!! 😰

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] 검색 μ•Œκ³ λ¦¬μ¦˜ 01

πŸ’‘ 숫자둜 이루어진 λ¦¬μŠ€νŠΈμ—μ„œ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 숫자λ₯Ό κ²€μƒ‰ν•˜λŠ” λͺ¨λ“ˆμ„ λ‹€μŒ μš”κ±΄μ— 따라 생성
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()

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] 검색 μ•Œκ³ λ¦¬μ¦˜ 02

πŸ’‘ 숫자둜 이루어진 λ¦¬μŠ€νŠΈμ—μ„œ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 숫자λ₯Ό κ²€μƒ‰ν•˜λŠ” λͺ¨λ“ˆμ„ λ‹€μŒ μš”κ±΄μ— 따라 생성
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()

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] μˆœμœ„ μ•Œκ³ λ¦¬μ¦˜ 01

πŸ’‘ 숫자둜 이루어진 λ¦¬μŠ€νŠΈμ—μ„œ μ•„μ΄ν…œμ˜ μˆœμœ„λ₯Ό 좜λ ₯ν•˜κ³ , μˆœμœ„μ— 따라 μ•„μ΄ν…œμ„ μ •λ ¬ν•˜λŠ” λͺ¨λ“ˆμ„ 생성. λ¦¬μŠ€νŠΈλŠ” 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}')

[μ—°μŠ΅λ¬Έμ œ] μˆœμœ„ μ•Œκ³ λ¦¬μ¦˜ 02

μ•ŒνŒŒλ²³ λ¬Έμžλ“€κ³Ό μ •μˆ˜λ“€μ— λŒ€ν•œ μˆœμœ„λ₯Ό μ •ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μˆœμœ„ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ 생성.
단, μ•ŒνŒŒλ²³μ€ μ•„μŠ€ν‚€μ½”λ“œ 값을 이용

# μ•ŒνŒŒλ²³ λ¬Έμžλ“€κ³Ό μ •μˆ˜λ“€μ— λŒ€ν•œ μˆœμœ„λ₯Ό μ •ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μˆœμœ„ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ 생성
# 단, μ•ŒνŒŒλ²³μ€ μ•„μŠ€ν‚€μ½”λ“œ 값을 이용

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)

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 01

πŸ’‘ 숫자둜 이루어진 리슀트λ₯Ό 버블정렬 μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ μ˜€λ¦„μ°¨μˆœκ³Ό λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” λͺ¨λ“ˆμ„ 생성.(단 μ •λ ¬ν•˜λŠ” 과정도 좜λ ₯ν•˜λ„λ‘ ν•œλ‹€.)

# 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}')

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 02

πŸ’‘ 숫자둜 이루어진 리슀트λ₯Ό μ‚½μž…μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ μ˜€λ¦„μ°¨μˆœκ³Ό λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” λͺ¨λ“ˆμ„ 생성.(단 μ •λ ¬ν•˜λŠ” 과정도 좜λ ₯ν•˜λ„λ‘ ν•œλ‹€)

# 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}')

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 03

πŸ’‘ 숫자둜 이루어진 리슀트λ₯Ό 선택정렬 μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ μ˜€λ¦„μ°¨μˆœκ³Ό λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” λͺ¨λ“ˆμ„ 생성.(단 μ •λ ¬ν•˜λŠ” 과정도 좜λ ₯ν•˜λ„λ‘ ν•œλ‹€.)

# 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}')

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 04

πŸ’‘ 숫자둜 이루어진 리슀트λ₯Ό 병합정렬 μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ μ˜€λ¦„μ°¨μˆœκ³Ό λ‚΄λ¦Όμ°¨μˆœμœΌλ‘œ μ •λ ¬ν•˜λŠ” λͺ¨λ“ˆμ„ 생성.(단 μ •λ ¬ν•˜λŠ” 과정도 좜λ ₯ν•˜λ„λ‘ ν•œλ‹€.)

# 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}')

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] μ΅œλŒ“κ°’ μ•Œκ³ λ¦¬μ¦˜ 01

πŸ’‘ μ΅œλŒ“κ°’ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ 숫자둜 이루어진 λ¦¬μŠ€νŠΈμ—μ„œ μ΅œλŒ“κ°’κ³Ό μ΅œλŒ“κ°’μ˜ 개수λ₯Ό μ°ΎλŠ” λͺ¨λ“ˆμ„ 생성 (λ¦¬μŠ€νŠΈλŠ” 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()}')

[μ—°μŠ΅λ¬Έμ œ] μ΅œλŒ“κ°’ μ•Œκ³ λ¦¬μ¦˜ 02

ν•™κΈ‰ 전체 ν•™μƒμ˜ μ‹œν—˜ μ μˆ˜μ— λŒ€ν•œ 평균과 μ΅œλŒ“κ°’μ„ κ΅¬ν•˜κ³  평균과 μ΅œλŒ“κ°’μ˜ 편차λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ΅œλŒ“κ°’ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ 생성

# ν•™κΈ‰ 전체 ν•™μƒμ˜ μ‹œν—˜ μ μˆ˜μ— λŒ€ν•œ 평균과 μ΅œλŒ“κ°’μ„ κ΅¬ν•˜κ³  평균과 μ΅œλŒ“κ°’μ˜
# 편차λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ΅œλŒ“κ°’ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ 생성

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)

[μ—°μŠ΅λ¬Έμ œ] μ΅œμ†Ÿκ°’ μ•Œκ³ λ¦¬μ¦˜ 01

μ΅œμ†Ÿκ°’ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ 숫자둜 이루어진 λ¦¬μŠ€νŠΈμ—μ„œ μ΅œμ†Ÿκ°’κ³Ό μ΅œμ†Ÿκ°’μ˜ 개수λ₯Ό μ°ΎλŠ” λͺ¨λ“ˆμ„ 생성
(λ¦¬μŠ€νŠΈλŠ” 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()}')

[μ—°μŠ΅λ¬Έμ œ] μ΅œμ†Ÿκ°’ μ•Œκ³ λ¦¬μ¦˜ 02

ν•™κΈ‰ 전체 ν•™μƒμ˜ μ‹œν—˜ μ μˆ˜μ— λŒ€ν•œ 평균과 μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜κ³  평균과 μ΅œμ†Ÿκ°’μ˜ 편차λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ΅œμ†Ÿκ°’ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ 생성

# ν•™κΈ‰ 전체 ν•™μƒμ˜ μ‹œν—˜ μ μˆ˜μ— λŒ€ν•œ 평균과 μ΅œμ†Ÿκ°’μ„ κ΅¬ν•˜κ³  평균과 μ΅œμ†Ÿκ°’μ˜
# 편차λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μ΅œμ†Ÿκ°’ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ 생성

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)

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] μ΅œλΉˆκ°’ μ•Œκ³ λ¦¬μ¦˜ 01

πŸ’‘ λ‹€μŒμ€ μ–΄λ–€ νšŒμ‚¬μ˜ 전직원 λ‚˜μ΄λ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ¦¬μŠ€νŠΈμ΄λ‹€. μ΅œλΉˆκ°’ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ λ‚˜μ΄ 뢄포λ₯Ό κ°„λ‹¨ν•œ κ·Έλž˜ν”„λ‘œ 좜λ ₯ν•˜λŠ” λͺ¨λ“ˆμ„ 생성

# 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()

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] μ΅œλΉˆκ°’ μ•Œκ³ λ¦¬μ¦˜ 02

πŸ’‘ λ‹€μŒμ€ νšŒμ°¨λ³„ 둜또 λ²ˆν˜Έμ΄λ‹€. μ΅œλΉˆλ„ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ λͺ¨λ“  회차의 각각의 λ²ˆν˜Έμ— λŒ€ν•œ λΉˆλ„μˆ˜λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ 생성

# 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()

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] 근사값 μ•Œκ³ λ¦¬μ¦˜ 01

πŸ’‘ λ‹€μŒ ν‘œλŠ” μˆ˜μ‹¬μ— λ”°λ₯Έ μˆ˜μ˜¨μ„ λ‚˜νƒ€λ‚΄κ³  μžˆλ‹€. 근사값 μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ μˆ˜μ‹¬μ„ μž…λ ₯ν•˜λ©΄ μˆ˜μ˜¨μ„ 좜λ ₯ν•˜λŠ” λͺ¨λ“ˆ 생성

# 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()

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] 근사값 μ•Œκ³ λ¦¬μ¦˜ 02

πŸ’‘ μ‚¬μš©μžμ˜ λͺΈλ¬΄κ²Œ(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()

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] μž¬κ·€ μ•Œκ³ λ¦¬μ¦˜ 01

πŸ’‘ λ‹€μŒμ€ β€˜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)

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] μž¬κ·€ μ•Œκ³ λ¦¬μ¦˜ 02

πŸ’‘ μ‚¬μš©μžκ°€ μ •μˆ˜ λ‘κ°œλ₯Ό μž…λ ₯ν•˜λ©΄ μž‘μ€ μ •μˆ˜μ™€ 큰 μ •μˆ˜ μ‚¬μ΄μ˜ λͺ¨λ“  μ •μˆ˜μ˜ 합을 κ΅¬ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ μž¬κ·€ μ•Œκ³ λ¦¬μ¦˜μ„ μ΄μš©ν•΄μ„œ 생성

# 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}')

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] 평균 μ•Œκ³ λ¦¬μ¦˜ 01

πŸ’‘ λ‹€μŒμ€ μ–΄λ–€ μ²΄μ‘°μ„ μˆ˜μ˜ κ²½κΈ° μ μˆ˜μ΄λ‹€. μ΅œλŒ“κ°’κ³Ό μ΅œμ†Ÿκ°’μ„ μ œμ™Έν•œ λ‚˜λ¨Έμ§€ μ μˆ˜μ— λŒ€ν•œ 평균을 κ΅¬ν•˜κ³  μˆœμœ„λ₯Ό μ •ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ 생성

# 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

πŸ’‘ [μ—°μŠ΅λ¬Έμ œ] 평균 μ•Œκ³ λ¦¬μ¦˜ 02

λ‹€μŒμ€ 홍길동 학생을 ν¬ν•¨ν•œ ν•™κΈ‰ 전체 ν•™μƒμ˜ μ‹œν—˜ 점수 평균을 λ‚˜νƒ€λ‚Έ ν‘œμ΄λ‹€. ν‘œλ₯Ό 보고, 홍길동 학생을 μ œμ™Έν•œ λ‚˜λ¨Έμ§€ ν•™μƒμ˜ 평균과 홍길동 ν•™μƒμ˜ 점수의 차이λ₯Ό 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ 생성.(좜λ ₯은 κ³Όλͺ©λ³„ μ μˆ˜μ™€ 평균 점수λ₯Ό λͺ¨λ‘ 좜λ ₯ν•œλ‹€.)

# λ‹€μŒμ€ 홍길동 학생을 ν¬ν•¨ν•œ ν•™κΈ‰ 전체 ν•™μƒμ˜ μ‹œν—˜ 점수 평균을 λ‚˜νƒ€λ‚Έ ν‘œμ΄λ‹€.
# ν‘œλ₯Ό 보고, 홍길동 학생을 μ œμ™Έν•œ λ‚˜λ¨Έμ§€ ν•™μƒμ˜ 평균과 홍길동 ν•™μƒμ˜ 점수의 차이λ₯Ό
# 좜λ ₯ν•˜λŠ” ν”„λ‘œκ·Έλž¨μ„ 생성.(좜λ ₯은 κ³Όλͺ©λ³„ μ μˆ˜μ™€ 평균 점수λ₯Ό λͺ¨λ‘ 좜λ ₯ν•œλ‹€.)


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}')

πŸ’» 좜처 : 제둜베이슀 데이터 μ·¨μ—… 슀쿨

profile
#데이터뢄석 #νΌν¬λ¨ΌμŠ€λ§ˆμΌ€νŒ… #데이터 #λ””μ§€ν„Έλ§ˆμΌ€νŒ…

0개의 λŒ“κΈ€