๐Ÿ˜ข ์Šคํ„ฐ๋””๋…ธํŠธ(์•Œ๊ณ ๋ฆฌ์ฆ˜ 1~7)

zoeยท2023๋…„ 3์›” 21์ผ
0

๊ผญ๊ผญ ๋‹ค์‹œํ’€์–ด๋ณด๊ธฐ!! ๐Ÿ˜ฐ

์„ ํ˜•๊ฒ€์ƒ‰

  • ์„ ํ˜•๊ฒ€์ƒ‰ : ์„ ํ˜•์œผ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์Šค์บ”ํ•˜๋ฉด์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ๋Š”๋‹ค
  • ๋ณด์ดˆ๋ฒ• : ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ์ฐพ์œผ๋ ค๋Š” ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์„œ ์ฐพ๋Š” ๊ณผ์ •
# ์„ ํ˜• ๊ฒ€์ƒ‰
datas = [3, 2, 5, 7, 9, 1, 0, 8, 6, 4]
print(f'datas : {datas}')
print(f'datas length : {len(datas)}')

searchData = int(input('์ฐพ์œผ๋ ค๋Š” ์ˆซ์ž ์ž…๋ ฅ : '))
searchResultIdx = -1

n = 0
while True:
    if n == len(datas): # ์ž…๋ ฅํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฆฌ์ŠคํŠธ ์•ˆ์— ์—†์„ ๋•Œ
        searchResultIdx = -1
        break
    elif datas[n] == searchData:
        searchResultIdx = n
        break
    n += 1
print(f'searchResultIdx : [{searchResultIdx}]')
# ๋ณด์ดˆ๋ฒ•
datas = [3, 2, 5, 7, 9, 1, 0, 8, 6, 4]
print(f'datas : {datas}')
print(f'datas length : {len(datas)}')

searchData = int(input('์ฐพ์œผ๋ ค๋Š” ์ˆซ์ž ์ž…๋ ฅ : '))
searchResultIdx = -1

datas.append(searchData) # ์ฐพ์œผ๋ ค๋Š” ์ˆซ์ž๋ฅผ ๋จผ์ € ์ถ”๊ฐ€

n = 0
while True:
    if datas[n] == searchData:
        if n != len(datas)-1:
            searchResultIdx = n
        break
    n += 1

print(f'datas : {datas}')
print(f'datas length : {len(datas)}')
print(f'searchResultIdx : {searchResultIdx}')

์„ ํ˜•๊ฒ€์ƒ‰(์‹ค์Šต)

๐Ÿ’ก ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ˆซ์ž โ€˜7โ€™์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์œ„์น˜(์ธ๋ฑ์Šค)๋ฅผ ์ถœ๋ ฅ

# ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ์ˆซ์ž โ€˜7โ€™์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์œ„์น˜(์ธ๋ฑ์Šค)๋ฅผ ์ถœ๋ ฅ

# nums = [4, 7, 10, 2, 4, 7, 0, 2, 7, 3, 9]
#
# searchNumber = int(input('์ˆซ์ž ๊ฒ€์ƒ‰ : '))
# searchNumberIndex = -1
# n = 0
# flag = True
# while flag:
#     if searchNumber != nums[n]:
#         searchNumberIndex = -1
#
#     elif searchNumber == nums[n]:
#         flag = False
#         searchNumberIndex = n
#         break
#     n += 1
#
# print(f'nums : {nums}')
# print(f'nums length : {len(nums)}')
# print(f'searchNumber : {searchNumber}')
# print(f'searchNumberIndex : {searchNumberIndex}')


nums = [4, 7, 10, 2, 4, 7, 0, 2, 7, 3, 9]

searchNumber = int(input('์ˆซ์ž ๊ฒ€์ƒ‰ : '))
searchNumberIndex = -1

nums.append(searchNumber)

n = 0
while True:
    if nums[n] == searchNumber:
        if n != len(nums)-1:
            searchNumberIndex = n
        break
    n += 1

print(f'nums : {nums}')
print(f'nums length : {len(nums)}')
print(f'searchNumber : {searchNumber}')
print(f'searchNumberIndex : {searchNumberIndex}')

if searchNumberIndex < 0:
    print('not search index')
else:
    print(f'search index : {searchNumberIndex}')

๐Ÿ’ก ๋ฆฌ์ŠคํŠธ์—์„œ ์ˆซ์ž โ€˜7โ€™์„ ๋ชจ๋‘ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ฐ๊ฐ์˜ ์œ„์น˜(์ธ๋ฑ์Šค)์™€ ๊ฒ€์ƒ‰ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅ

# ๋ฆฌ์ŠคํŠธ์—์„œ ์ˆซ์ž โ€˜7โ€™์„ ๋ชจ๋‘ ๊ฒ€์ƒ‰ํ•˜๊ณ  ๊ฐ๊ฐ์˜ ์œ„์น˜(์ธ๋ฑ์Šค)์™€ ๊ฒ€์ƒ‰ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅ

nums = [4, 7, 10, 2, 4, 7, 0, 2, 7, 3, 9]

def searchNumber(n) :
    searchNumber = int(input('์ˆซ์ž ๊ฒ€์ƒ‰ : '))
    
    searchResultIdxs = []
    nums.append(searchNumber)
    n = 0
    while True:
        if nums[n] == searchNumber:
            if n != len(nums)-1:
                searchResultIdxs.append(n)
            else:
                break
        n += 1
    return searchResultIdxs

print(f'nums : {nums}')
print(f'nums length : {len(nums)}')
print(f'searchResultIdxs : {searchNumber(searchNumber)}')
print(f'searchResultIdxs length: {len(searchNumber(searchNumber))}')

๐Ÿ’ก ์ด์ง„๊ฒ€์ƒ‰

  • ์ด์ง„๊ฒ€์ƒ‰ : ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ์ค‘์•™๊ฐ’๊ณผ์˜ ํฌ๊ณ  ์ž‘์Œ์„ ์ด์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰
  • ์ด์ง„๊ฒ€์ƒ‰์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฏธ๋ฆฌ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค
datas = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]

print(f'datas : {datas}')
print(f'data length : {len(datas)}')

searchData = int(input('์ฐพ์œผ๋ ค๋Š” ์ˆซ์ž ์ž…๋ ฅ : '))
searchResultIdx = -1

startIdx = 0
endIdx = len(datas) - 1
midIdx = (startIdx + endIdx) // 2 # ๋ชซ
midVal = datas[midIdx]

print(f'midIdx : {midIdx}')
print(f'midVal : {midVal}')

while searchData <= datas[len(datas)-1] and searchData >= datas[0]: 
# ๋ฐ์ดํ„ฐ ๋ฒ”์œ„ ์•ˆ์— ์žˆ์–ด์•ผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ์–ด์„œ ์กฐ๊ฑด ์„ค์ •ํ•จ
    if searchData == datas[len(datas)-1]:
        searchResultIdx = len(datas)-1
        break
    elif searchData > midVal:
        startIdx = midIdx
        midIdx = (startIdx + endIdx) // 2
        midVal = datas[midIdx]
        print(f'midIdx : {midIdx}')
        print(f'midVal : {midVal}')
    elif searchData < midVal:
        endIdx = midIdx
        midIdx = (startIdx + endIdx) // 2
        midVal = datas[midIdx]
        print(f'midIdx : {midIdx}')
        print(f'midVal : {midVal}')
    elif searchData == midVal:
        searchResultIdx = midIdx
        break
print(f'searchResultIdx : {searchResultIdx}')

์ด์ง„๊ฒ€์ƒ‰(์‹ค์Šต)

๋ฆฌ์ŠคํŠธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ โ€˜7โ€™์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์œ„์น˜(์ธ๋ฑ์Šค)๋ฅผ ์ถœ๋ ฅ

# ๋ฆฌ์ŠคํŠธ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ ํ›„ โ€˜7โ€™์„ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์œ„์น˜(์ธ๋ฑ์Šค)๋ฅผ ์ถœ๋ ฅ

nums = [4, 10, 22, 5, 0, 17, 7, 11, 9, 61, 88]

nums.sort()
print(f'nums : {nums}')

searchData = int(input('์ฐพ์œผ๋ ค๋Š” ์ˆซ์ž ์ž…๋ ฅ : '))
searchResultIdx = -1

startIdx = 0
endIdx = len(nums) -1
midIdx = (startIdx + endIdx) // 2
midVal = nums[midIdx]

while searchData <= nums[(len(nums)-1)] and searchData >= nums[0]:
    if searchData == nums[len(nums)-1]:
        searchResultIdx = nums[len(nums)-1]
        break
    elif searchData > midVal:
        startIdx = midIdx
        midIdx = (startIdx + endIdx) // 2
        midVal = nums[midIdx]
        print(f'midIdx : {midIdx}')
        print(f'midVal : {midVal}')
    elif searchData < midVal:
        endIdx = midIdx
        midIdx = (startIdx + endIdx) // 2
        midVal = nums[midIdx]
        print(f'midIdx : {midIdx}')
        print(f'midVal : {midVal}')
    elif searchData == midVal:
        searchResultIdx = midIdx
        break
print(f'searchResultIdx : {searchResultIdx}')

๐Ÿ’ก ์ˆœ์œ„

  • ์ˆœ์œ„ : ์ˆ˜์˜ ํฌ๊ณ  ์ž‘์Œ์„ ์ด์šฉํ•ด์„œ ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ
import random

nums = random.sample(range(50, 100),20)
print(nums)

ranks = [0 for i in range(20)] # โ˜…
print(ranks)

for idx, num1 in enumerate(nums):
    for num2 in nums: # ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋ฉด nums ๋‹ค์Œ ๋ฒˆํ˜ธ์™€ ๋น„๊ต
        if num1 < num2:
            ranks[idx] += 1

ranks2 = [0 for i in range(20)] # โ˜…
print(ranks)
print()

for idx, num1 in enumerate(nums):
    for num2 in nums: # ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•˜๋ฉด nums ๋‹ค์Œ ๋ฒˆํ˜ธ์™€ ๋น„๊ต
        if num1 > num2:
            ranks2[idx] += 1

print(nums)
print(ranks)
print(ranks2)

for idx, num in enumerate(nums):
    print(f'num : {num} \t rank : {ranks[idx]+1}')
print()
for idx, num in enumerate(nums):
    print(f'num : {num} \t rank : {ranks2[idx]+1}')

๐Ÿ’ก ์ˆœ์œ„(์‹ค์Šต)

๐Ÿ’ก ํ•™๊ธ‰ ํ•™์ƒ(20๋ช…)๋“ค์˜ ์ค‘๊ฐ„๊ณ ์‚ฌ์™€ ๊ธฐ๋ง๊ณ ์‚ฌ ์„ฑ์ ์„ ์ด์šฉํ•ด์„œ ๊ฐ๊ฐ์˜ ์ˆœ์œ„๋ฅผ ๊ตฌํ•˜๊ณ , ์ค‘๊ฐ„๊ณ ์‚ฌ ๋Œ€๋น„ ๊ธฐ๋ง๊ณ ์‚ฌ ์ˆœ์œ„ ๋ณ€ํ™”(ํŽธ์ฐจ)๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด ๋ณด์ž.(์‹œํ—˜ ์„ฑ์ ์€ ๋‚œ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค.)

import random

midStuScos = random.sample(range(50, 100),20)
mid_ranks = [0 for i in range(20)]
endStuScos = random.sample(range(50, 100),20)
end_ranks = [0 for i in range(20)]

# print(midStuScos)
# print(mid_ranks)
# print(endStuScos)
# print(end_ranks)

midSum = 0
midAvg = 0

for idx, n1 in enumerate(midStuScos):
    for n2 in midStuScos:
        if n1 < n2:
            mid_ranks[idx] += 1
#print(mid_ranks)

for idx, n1 in enumerate(endStuScos):
    for n2 in endStuScos:
        if n1 < n2:
            end_ranks[idx] += 1
#print(end_ranks)

deviationRank = [0 for i in range(20)]
for num in range(20):
    if mid_ranks[num] > end_ranks[num]:
        deviationRank[num] = 'โ†‘'+str(mid_ranks[num] - end_ranks[num])
    elif mid_ranks[num] < end_ranks[num]:
        deviationRank[num] = 'โ†“'+str(abs(mid_ranks[num] - end_ranks[num]))
    elif mid_ranks[num] == end_ranks[num]:
        deviationRank[num] = '=' + str(mid_ranks[num] - end_ranks[num])
#print(deviationRank)

for num in range(len(mid_ranks)):
    print(f'mid_rank : {mid_ranks[num]}\t end_rank : {end_ranks[num]}\t'
          f' Deviation : {deviationRank[num]}')
print()
# ๋ชจ๋“ˆ ์ด์šฉ
# rank ํŒŒ์ผ

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(ess))]
        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'
                  f'Deviation : {deviation}')
#------------------------------------------------------------
# ๋ชจ๋“ˆ ์ด์šฉ
import random
import rank

midStuScos = random.sample(range(50, 100),20)
endStuScos = random.sample(range(50, 100),20)

rd = rank.RankDeviation(midStuScos, endStuScos)
rd.setMidRank()
print(f'midStuScores : {midStuScos}')
print(f'mid_rank : {rd.getMidRank()}')
rd.setEndRank()
print(f'endStuScores : {endStuScos}')
print(f'end_rank : {rd.getEndRank()}')

rd.printRankDeviation()

๐Ÿ’ก ๋ฒ„๋ธ”์ •๋ ฌ

  • ๋ฒ„๋ธ”์ •๋ ฌ : ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ธ์ ‘ํ•˜๋Š” ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๊ตํ•˜๋ฉด์„œ ํฐ ์ˆซ์ž๋ฅผ ๊ฐ€์žฅ ๋์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
nums = [10, 2, 7, 21, 0]
print(f'not sorted nums : {nums}')

length = len(nums) - 1

for i in range(length):
    for j in range(length-i):
        if nums[j] > nums[j+1]:
            # temp = nums[j]
            # nums[j] = nums[j+1]
            # nums[j+1] = temp

            nums[j], nums[j+1] = nums[j+1], nums[j] #์œ„์˜ ๊ฐ’๋ฐ”๊พธ๋Š” ๊ฒƒ๊ณผ ๋™์ผ โ˜…โ˜…โ˜…โ˜…โ˜…
        print(nums)
    print()
print(f'sorted nums : {nums}')

๐Ÿ’ก ๋ฒ„๋ธ”์ •๋ ฌ(์‹ค์Šต)

์ƒˆ ํ•™๋…„์ด ๋˜์–ด ํ•™๊ธ‰์— 20๋ช…์˜ ์ƒˆ๋กœ์šด ํ•™์ƒ๋“ค์ด ๋ชจ์˜€๋‹ค. ํ•™์ƒ๋“ค์„ ํ‚ค ์ˆœ์„œ๋กœ ์ค„ ์„ธ์›Œ ๋ณด์ž. ํ•™์ƒ๋“ค์˜ ํ‚ค๋Š” random ๋ชจ๋“ˆ์„ ์ด์šฉํ•ด์„œ 170 ~ 185์‚ฌ์ด๋กœ ์ƒ์„ฑ

# sortMod ํŒŒ์ผ

import copy

def bubbleSort(ns, deepCopy = True): #โ˜…โ˜…โ˜…

    if deepCopy:
        cns = copy.copy(ns) #๊นŠ์€ ๋ณต์‚ฌ, ์›๋ณธ๋ฐ์ดํ„ฐ ์œ ์ง€, ์ƒˆ๋กœ์šด ๋ณต์‚ฌ
    else:
        cns = ns # ์–•์€๋ณต์‚ฌ, ์›๋ณธ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ
    length = len(cns) - 1
    for i in range(length):
        for j in range(length - i):
            if cns[j] > cns[j+1]:
                cns[j],cns[j+1] = cns[j+1], cns[j]
    return cns
    
# ์ƒˆ ํ•™๋…„์ด ๋˜์–ด ํ•™๊ธ‰์— 20๋ช…์˜ ์ƒˆ๋กœ์šด ํ•™์ƒ๋“ค์ด ๋ชจ์˜€๋‹ค. ํ•™์ƒ๋“ค์„ ํ‚ค ์ˆœ์„œ๋กœ
# ์ค„ ์„ธ์›Œ ๋ณด์ž. ํ•™์ƒ๋“ค์˜ ํ‚ค๋Š” random ๋ชจ๋“ˆ์„ ์ด์šฉํ•ด์„œ 170 ~ 185์‚ฌ์ด๋กœ ์ƒ์„ฑ

import random
import sortMod

students = []
for i in range(20):
    students.append(random.randint(170, 185))

print(f'students : {students}')

sortedStudent = sortMod.bubbleSort(students)
print(f'students : {students}')
print(f'students : {sortedStudent}')

๐Ÿ’ก ์‚ฝ์ž…์ •๋ ฌ

  • ์‚ฝ์ž…์ •๋ ฌ : ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ž๋ฃŒ ๋ฐฐ์—ด๊ณผ ๋น„๊ตํ•ด์„œ ์ •๋ ฌ ์œ„์น˜๋ฅผ ์ฐพ๋Š”๋‹ค
nums = [5, 10, 2, 1, 0]

# accending
for i1 in range(1, len(nums)):
    i2 = i1 -1
    cNum = nums[i1]

    while nums[i2] > cNum and i2 >= 0:
        nums[i2 + 1] = nums[i2]
        i2 -= 1
    nums[i2 + 1] = cNum

print(f'nums : {nums}')


#decending
for i1 in range(1, len(nums)):
    i2 = i1 -1
    cNum = nums[i1]

    while nums[i2] < cNum and i2 >= 0:
        nums[i2 + 1] = nums[i2]
        i2 -= 1
    nums[i2 + 1] = cNum

print(f'nums : {nums}')

๐Ÿ’ก ์‚ฝ์ž…์ •๋ ฌ(์‹ค์Šต)

๐Ÿ’ก 1๋ถ€ํ„ฐ 1000๊นŒ์ง€์˜ ๋‚œ์ˆ˜ 100๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋‹ค์Œ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“ˆ์„ ์ƒ์„ฑ

# setMod2 ํŒŒ์ผ

class sortNumbers:

    def __init__(self, ns, asc = True):
        self.nums = ns
        self.isAsc = asc

    def isAcending(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 getSortedNumber(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]
# 1๋ถ€ํ„ฐ 1000๊นŒ์ง€์˜ ๋‚œ์ˆ˜ 100๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋‹ค์Œ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“ˆ์„ ์ƒ์„ฑ

import random
import sortMod2

nums = random.sample(range(1, 1000),100)
print(f'not sorted numbers : {nums}')

#๊ฐ์ฒด ์ƒ์„ฑ
sn = sortMod2.sortNumbers(nums)

# ์˜ค๋ฆ„์ฐจ์ˆœ(ascending)
sn.setSort()
sortedNumbers = sn.getSortedNumber()
print(f'sorted numbers by ASC : {sortedNumbers}')

# ๋‚ด๋ฆผ์ฐจ์ˆœ(descending)
sn.isAcending(False)
sn.setSort()
sortedNumbers = sn.getSortedNumber()
print(f'sorted numbers by DESC : {sortedNumbers}')

# ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’
print(f'min : {sn.getMinNumber()}')
print(f'max : {sn.getMaxNumber()}')

๐Ÿ’ก ์„ ํƒ์ •๋ ฌ

  • ์„ ํƒ์ •๋ ฌ : ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ ์ค‘์— ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„, ๊ทธ ๊ฐ’์„ ๋งจ ์•ž์— ์œ„์น˜ํ•œ ๊ฐ’๊ณผ ๊ต์ฒดํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ž๋ฃŒ๋ฅผ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
nums = [4, 2, 5, 1, 3]
print(f'nums : {nums}')


for i in range(len(nums)-1):
    # ์ฒซ ๊ธฐ์ค€์ด ๋  ์ˆซ์ž๋Š” ๊ธธ์ด - 1, ๋งˆ์ง€๋ง‰ ์ˆซ์ž๊นŒ์ง€ ๊ฐ”์„ ๋• ์ด๋ฏธ ์•ž์— ๋‹ค ์ •๋ ฌ์ด ๋˜์–ด ์žˆ์œผ๋‹ˆ๊นŒ
    minidx = i
    for j in range(i+1, len(nums)): # ๊ธฐ์ค€์ด ๋˜๋Š” ์ˆซ์ž ์ดํ›„๋ถ€ํ„ฐ ๋๊นŒ์ง€
        if nums[minidx] > nums[j]:
            minidx = j

    # tempNum = nums[i]
    # nums[i] = nums[minidx]
    # nums[minidx] = tempNum

    nums[i], nums[minidx] = nums[minidx], nums[i] # โ˜…โ˜…โ˜…โ˜…โ˜… ์œ„์˜ ์ˆซ์ž ๋ฐ”๊พธ๊ธฐ์™€ ๋™์ผ
    print(f'nums : {nums}')
    
print(f'final nums : {nums}')

๐Ÿ’ก ์„ ํƒ์ •๋ ฌ(์‹ค์Šต)

๐Ÿ’ก ์„ ํƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์„œ ํ•™์ƒ 20๋ช…์˜ ์‹œํ—˜ ์ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ๊ณผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ชจ๋“ˆ์„ ์ƒ์„ฑ. ์‹œํ—˜ ์ ์ˆ˜๋Š” 50๋ถ€ํ„ฐ 100๊นŒ์ง€๋กœ ํ•œ๋‹ค

# select_sortMod ํŒŒ์ผ

class SortNumber:

    def __init__(self, ns, asc = True):
        self.nums = ns
        self.isAsc = asc


    def isAcending(self, flag):
        self.isAsc = flag

    def setSort(self):
        for i in range(len(self.nums)-1):
            minIdx = i
            if self.isAsc:
                for j in range(i+1, len(self.nums)):
                    if self.nums[minIdx] > self.nums[j]:
                        minIdx = j
                self.nums[i], self.nums[minIdx] = self.nums[minIdx],self.nums[i]
            else:
                for j in range(i + 1, len(self.nums)):
                    if self.nums[minIdx] < self.nums[j]:
                        minIdx = j
                self.nums[i], self.nums[minIdx] = self.nums[minIdx],self.nums[i]

    def getSortNumbers(self):
        if self.isAsc:
            self.setSort()
            return self.nums
        else:
            self.setSort()
            return self.nums
# ์„ ํƒ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์„œ ํ•™์ƒ 20๋ช…์˜ ์‹œํ—˜ ์ ์ˆ˜๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ๊ณผ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ
# ์ •๋ ฌํ•˜๋Š” ๋ชจ๋“ˆ์„ ๋งŒ๋“ค์–ด๋ณด์ž. ์‹œํ—˜ ์ ์ˆ˜๋Š” 50๋ถ€ํ„ฐ 100๊นŒ์ง€๋กœ ํ•œ๋‹ค

import random
import select_sortMod
import copy

scores = random.sample(range(50, 100), 20)
print(f'not sorted scores : {scores}')
print(f'scores length : {len(scores)}')
print()


sc = select_sortMod.SortNumber(copy.copy(scores)) #โ˜…โ˜…โ˜… ๋ณต์‚ฌ๋œ ๋ฆฌ์ŠคํŠธ๋กœ ์ •๋ ฌ
print(f'not sorted scores : {scores}')
sc.isAcending(True)
print(f'result(ASC) : {sc.getSortNumbers()}')
print()
print(f'not sorted scores : {scores}')
sc.isAcending(False)
print(f'result(DESC) : {sc.getSortNumbers()}')

์ตœ๋Œ“๊ฐ’

  • ์ตœ๋Œ“๊ฐ’ : ๊ฐ€์žฅ ํฐ ๊ฐ’
class MaxAlgorithm:

    def __init__(self, ns):
        self.nums = ns
        self.maxNum = 0

    def getMaxNum(self):
        self.maxNum = self.nums[0] # ์ฒ˜์Œ์—” max๊ฐ’์— ๋งจ ์•ž์˜ ๊ฐ’ ๋ถ€์—ฌ

        for n in self.nums:
            if self.maxNum < n:
                self.maxNum = n
        return self.maxNum

ma = MaxAlgorithm([-2, -4, 5, 7, 10, 0, 8, 20, -11])
maxNum = ma.getMaxNum()
print(f'maxNum : {maxNum}')

์ตœ๋Œ“๊ฐ’(์‹ค์Šต)

  • ord() : ๋ฌธ์ž์—ด์„ ์•„์Šคํ‚ค์ฝ”๋“œ๋กœ ๋ฐ˜ํ™˜

๋ฆฌ์ŠคํŠธ์—์„œ ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ์„ฑ

# ๋ฆฌ์ŠคํŠธ์—์„œ ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ์„ฑ

class MaxAlgorithm:

    def __init__(self, chars):
        self.chars = chars
        self.maxChar = 0

    def getMaxChar(self):
        self.maxChar = self.chars[0]

        for c in self.chars:
            if ord(self.maxChar) < ord(c):
                self.maxChar = c
        return self.maxChar # โ˜…


chars = ['c','x','Q','A','e','P','p']
mc = MaxAlgorithm(chars)
maxChar = mc.getMaxChar()
print(f'maxChar : {maxChar}')

์ตœ์†Ÿ๊ฐ’

  • ์ตœ์†Ÿ๊ฐ’ : ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’
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:
                self.minNum = n
        return self.minNum

numbers = [-2, -4, 5, 7, 10, 0, 8, 20, -11]
ma = MinAlgorithm(numbers)
minNumber = ma.getMinNum()
print(f'minNum : {minNumber}')

์ตœ์†Ÿ๊ฐ’(์‹ค์Šต)

๋ฆฌ์ŠคํŠธ์—์„œ ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ์„ฑ

# ๋ฆฌ์ŠคํŠธ์—์„œ ์•„์Šคํ‚ค์ฝ”๋“œ๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์„ ์ฐพ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ์„ฑ

class MinAlgorithm:
    def __init__(self, cs):
        self.chars = cs
        self.minChar = 0

    def getMinChar(self):
        self.minChar = self.chars[0]

        for c in self.chars:
            if ord(self.minChar) > ord(c):
                self.minChar = c
        return self.minChar

chars = ['c','x','Q','A','e','P','p']
ma = MinAlgorithm(chars)
minChar = ma.getMinChar()
print(f'minChar : {minChar}')

๐Ÿ’ก ์ตœ๋นˆ๊ฐ’

  • ์ตœ๋นˆ๊ฐ’ : ๋นˆ๋„์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€ ๋ฐ์ดํ„ฐ
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'index length : {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}์˜ ๋นˆ๋„์ˆ˜๊ฐ€ {maxNumIdx}๋กœ ๊ฐ€์žฅ ๋†’๋‹ค')

๐Ÿ’ก ์ตœ๋นˆ๊ฐ’(์‹ค์Šต)

๐Ÿ’ก ์ตœ๋นˆ๊ฐ’ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์„œ ํ•™์ƒ 100๋ช…์˜ ์ ์ˆ˜ ๋ถ„ํฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ด๊ธฐ

# ์ตœ๋นˆ๊ฐ’ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์„œ ํ•™์ƒ 100๋ช…์˜ ์ ์ˆ˜ ๋ถ„ํฌ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ด๊ธฐ
import copy
import random

scores = []
for i in range(100): # โ˜…โ˜…โ˜…โ˜…โ˜…
    rn = random.randint(71, 100)
    if rn != 100 :
        rn = rn - (rn % 5)
    scores.append(rn)

class Algorithm:
    def __init__(self, ns):
        self.nums = ns
        self.maxNum = 0
        self.maxNumIdx = 0

    def setMaxNumAndMaxNumIdx(self):
        self.maxNum = self.nums[0]
        self.maxNumIdx = 0

    def getMaxNumAndMaxNumIdx(self):
        for i, n in enumerate(self.nums):
            if n > self.maxNum:
                self.maxNum = n
                self.maxNumIdx = i
    def getMaxNum(self):
        return self.maxNum
    def getMaxNumIdx(self):
        return self.maxNumIdx


    def setSortMinNum(self):
        self.sortMinNum = self.nums[0]

    def sortNum(self):
        for i in range(len(self.nums)-1):
            for j in range(len(self.nums)-1-i):
                if self.nums[j] < self.nums[j+1]:
                    self.nums[j], self.nums[j+1] = self.nums[j+1],self.nums[j]




print(f'scores : {scores}')
sc = Algorithm(scores)
sc.setMaxNumAndMaxNumIdx()
sc.getMaxNumAndMaxNumIdx()

maxNum = sc.getMaxNum()
maxNumIdx = sc.getMaxNumIdx()
print(f'maxNum : {maxNum}')
print(f'maxNumIdx : {maxNumIdx}')

# ์ธ๋ฑ์Šค ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
index = [0 for i in range(maxNum+1)]

# ์ธ๋ฑ์Šค ๋ฆฌ์ŠคํŠธ์— ๋นˆ๋„ ์ €์žฅ
for sc in scores:
    index[sc] = index[sc] + 1
print(f'index : {index}')

#####๋‚ด๊ฐ€ ํ•œ ๋ถ€๋ถ„#####
# index2 = []
# for idx in index:
#     if idx != 0:
#        index2.append(idx)
# print(f'index2 : {index2}')
#
# idx2 = Algorithm(index2)
# idx2.setSortMinNum()
# idx2.sortNum()
# print(f'index2 : {index2}')
#
# n = 1
# for idx2 in index2:
#     for idx, num in enumerate(index):
#         if idx2 == num:
#             print(f'{n}. {idx}๋นˆ๋„์ˆ˜ : {num}\t', end='')
#             print('+'*num)
#             n += 1
#####๋‚ด๊ฐ€ ํ•œ ๋ถ€๋ถ„#####


n = 1
while True:
    maxAlo = Algorithm(index)
    maxAlo.setMaxNumAndMaxNumIdx()
    maxAlo.getMaxNumAndMaxNumIdx()
    maxNum = maxAlo.getMaxNum()
    maxNumIdx = maxAlo.getMaxNumIdx()

    if maxNum == 0:
        break

    print(f'{n}. {maxNumIdx} ๋นˆ๋„์ˆ˜ : {maxNum}\t\t', end='' )
    print('+'*maxNum)

    index[maxNumIdx] = 0
    n += 1

๐Ÿ’ก ๊ทผ์‚ฟ๊ฐ’

  • ๊ทผ์‚ฌ๊ฐ’ : ํŠน์ • ๊ฐ’(์ฐธ๊ฐ’)์— ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ’
import random

nums = random.sample(range(0, 50), 20)
print(f'nums : {nums}')

inputNumber = int(input('input number : '))
print(f'inputNumber : {inputNumber}')

nearNum = 0
diffNum = 50 # ์ตœ์†Œ๊ฐ’๊ณผ ์ตœ๋Œ€๊ฐ’์˜ ์ฐจ์ด

for n in nums:
    absNumber = abs(n - inputNumber)
    #print(f'absNumber : {absNumber}')

    if absNumber < diffNum:
        diffNum = absNumber
        nearNum = n

print(f'nearNumber : {nearNum}')

๐Ÿ’ก ๊ทผ์‚ฟ๊ฐ’(์‹ค์Šต)

๊ทผ์‚ฟ๊ฐ’ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์„œ ์‹œํ—˜ ์ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•™์ ์ด ์ถœ๋ ฅ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑ
ํ‰๊ท  ์ ์ˆ˜์— ๋”ฐ๋ฅธ ํ•™์  ๊ธฐ์ค€ ์ ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

# near ํŒŒ์ผ


def getNearNum(an):
    baseScores = [95, 85, 75, 65, 55]
    nearNum = 0
    minNum = 100

    for n in baseScores:
        absNum = abs(n - an)
        if absNum < minNum:
            minNum = absNum
            nearNum = n

    if nearNum == 95:
        return 'A'
    elif nearNum == 85:
        return 'B'
    elif nearNum == 75:
        return 'C'
    elif nearNum == 65:
        return 'D'
    elif nearNum <= 55:
        return 'E'
# ๊ทผ์‚ฟ๊ฐ’ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด์„œ ์‹œํ—˜ ์ ์ˆ˜๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ•™์ ์ด ์ถœ๋ ฅ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ƒ์„ฑ
# ํ‰๊ท  ์ ์ˆ˜์— ๋”ฐ๋ฅธ ํ•™์  ๊ธฐ์ค€ ์ ์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

import near

scores = []

kor = int(input('input kor score : '))
scores.append(kor)
eng = int(input('input eng score : '))
scores.append(eng)
mat = int(input('input mat score : '))
scores.append(mat)
sci = int(input('input sci score : '))
scores.append(sci)
his = int(input('input his score : '))
scores.append(his)

totalScore = sum(scores)
print(f'totalScore : {totalScore}')

avgScore = totalScore / len(scores)
print(f'avgScore : {avgScore}')

grade = near.getNearNum(avgScore)
print(f'grade : {grade}')

ํ‰๊ท 

  • ํ‰๊ท  : ์—ฌ๋Ÿฌ ์ˆ˜๋‚˜ ์–‘์˜ ์ค‘๊ฐ„๊ฐ’์„ ๊ฐ–๋Š” ์ˆ˜
import random

nums = random.sample(range(0, 100),100)
print(f'nums : {nums}')

total = 0
for n in nums:
    total += n

average = total / len(nums)
print(f'total : {total}, average : {average}')
# 50 ์ด์ƒ 90์ดํ•˜ ์ˆ˜๋“ค์˜ ํ‰๊ท 

import random
nums = random.sample(range(0, 100),30)
print(f'nums : {nums}')

total = 0
targetNums = []
for n in nums:
    if n >= 50 and n <= 90:
        total += n
        targetNums.append(n)
average = total / len(targetNums)
print(f'total : {total}, average : {round(average,2)}')
# ์ •์ˆ˜๋“ค์˜ ํ‰๊ท 

nums = [4, 5.12, 0, 5, 7.34, 9.1, 9, 3, 3.159, 1, 11, 12.789]
print(f'nums : {nums}')

targetNums = []
total = 0
for n in nums:
    if n - int(n) == 0:
        targetNums.append(n)
        total += n

average = total / len(targetNums)

print(f'total : {total}, average : {round(average,2)}')
# ์‹ค์ˆ˜๋“ค์˜ ํ‰๊ท 

nums = [4, 5.12, 0, 5, 7.34, 9.1, 9, 3, 3.159, 1, 11, 12.789]
print(f'nums : {nums}')

targetNums = []
total = 0
for n in nums:
    if n - int(n) != 0:
        targetNums.append(n)
        total += n
print(f'nums : {targetNums}')
average = total / len(targetNums)

print(f'total : {total}, average : {round(average,2)}')

๐Ÿ’ก ํ‰๊ท (์‹ค์Šต)

๋‹ค์Œ์€ ์–ด๋–ค ์ฒด์กฐ์„ ์ˆ˜์˜ ์ ์ˆ˜์ด๋‹ค.ํ‰๊ท ์„ ๊ตฌํ•˜๊ณ  ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ์„ฑ

#near2 ํŒŒ์ผ

class Top5Players:
    def __init__(self, cs, ns):
        self.currentScores = cs
        self.newScore = ns

    def setAlignScore(self):

        nearIdx = 0
        nearScore = 0
        minNum = 10

        for i, score in enumerate(self.currentScores):
            absNums = abs(self.newScore - score)

            if absNums < minNum:
                minNum = absNums
                nearIdx = i
                nearScore = score
        if self.newScore >= self.currentScores[nearIdx]:
            for i in range(len(self.currentScores)-1, nearIdx, -1): # โ˜…โ˜…โ˜…โ˜…โ˜…
                self.currentScores[i] = self.currentScores[i-1] # ex) 5๋ฒˆ์งธ์—๋Š” 4๋ฒˆ ๊ฐ’์ด ๋“ค์–ด์˜ค๊ณ , 4๋ฒˆ์งธ์—๋Š” 3๋ฒˆ ๊ฐ’์ด ๋“ค์–ด์˜ค๊ณ ...
            self.currentScores[nearIdx] = self.newScore # ์ƒˆ๋กœ์šด ๊ฐ’์€ ๊ทผ์‚ฌ๊ฐ’ ์œ„์น˜์—

        else:
            for i in range(len(self.currentScores)-1, nearIdx+1, -1): # โ˜…โ˜…โ˜…โ˜…โ˜…
                self.currentScores[i] = self.currentScores[i-1] # ex) 5๋ฒˆ์งธ์—๋Š” 4๋ฒˆ ๊ฐ’์ด ๋“ค์–ด์˜ค๊ณ , 4๋ฒˆ์งธ์—๋Š” 3๋ฒˆ ๊ฐ’์ด ๋“ค์–ด์˜ค๊ณ ...
            self.currentScores[nearIdx] = self.newScore # ์ƒˆ๋กœ์šด ๊ฐ’์€ ๊ทผ์‚ฌ๊ฐ’ ๋’ค์— ๋ฐฐ์ •
    def getFinalTop5Scores(self):
        return self.currentScores
# ๋‹ค์Œ์€ ์–ด๋–ค ์ฒด์กฐ์„ ์ˆ˜์˜ ์ ์ˆ˜์ด๋‹ค.ํ‰๊ท ์„ ๊ตฌํ•˜๊ณ  ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ƒ์„ฑ
import near2


scores = [8.9, 7.6, 8.2, 9.1, 8.8, 8.1, 7.9, 9.4, 7.2, 8.7]
finalScores = [9.12, 8.95, 8.12, 7.90, 7.88]
total = 0
for sc in scores:
    total += sc

average = total / len(scores)
print(f'total : {total}, average : {round(average,2)}')

tp = near2.Top5Players(finalScores, average)
tp.setAlignScore()
tp.getFinalTop5Scores()
print('์ตœ์ข… ์ „์ฒด ์ˆœ์œ„')
print(f'top5PlayerScores : {tp.getFinalTop5Scores()}')

์žฌ๊ท€

  • ์žฌ๊ท€ : ๋‚˜ ์ž์‹ ์„ ๋‹ค์‹œ ํ˜ธ์ถœ
#  ๋ฐ˜๋ณต๋ฌธ ๋Œ€์‹  ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ์˜ˆ
def recusion(num):
    if num > 0:
        print('*'*num)
        return recusion(num - 1)
    else:
        return 1

recusion(10)
# ์žฌ๊ท€ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ํŒฉํ† ๋ฆฌ์–ผ ๊ตฌํ•˜๊ธฐ

def factorial(num):
    if num > 0:
        return num * factorial(num - 1)
    else:
        return 1

print(f'factorial : {factorial(10)}')

์žฌ๊ท€(์‹ค์Šต)

์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜ ๊ณ„์‚ฐ
์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•
โ€ข ๋‘ ์ž์—ฐ์ˆ˜ n1, n2์— ๋Œ€ํ•˜์—ฌ (n1 > n2) n1๋ฅผ n2๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ r์ด๋ผ๊ณ  ํ•  ๋•Œ,
โ€ข n1๊ณผ n2์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” n2์™€ r์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ฐ™๋‹ค

# ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ์ตœ๋Œ€ ๊ณต์•ฝ์ˆ˜ ๊ณ„์‚ฐ

# ์œ ํด๋ฆฌ๋“œ ํ˜ธ์ œ๋ฒ•
# โ€ข ๋‘ ์ž์—ฐ์ˆ˜ n1, n2์— ๋Œ€ํ•˜์—ฌ (n1 > n2) n1๋ฅผ n2๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ r์ด๋ผ๊ณ  ํ•  ๋•Œ,
# โ€ข n1๊ณผ n2์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜๋Š” n2์™€ r์˜ ์ตœ๋Œ€๊ณต์•ฝ์ˆ˜์™€ ๊ฐ™๋‹ค

def greatestCommonDevide(n1, n2):

    maxNum = 0
    for i in range(1, (n1 + 1)):
        if n1 % i == 0 and n2 % i  == 0:
            maxNum = i
    return maxNum

print(f'greatestCommonDevide(82, 32) : {greatestCommonDevide(82, 32)}')
print(f'greatestCommonDevide(96, 40) : {greatestCommonDevide(96, 40)}')



def gcd(n1, n2):
    if n1 % n2 == 0:
        return n2
    else:
        return gcd(n2,n1 % n2)

print(f'gcd(82, 32) : {gcd(82, 32)}')
print(f'gcd(96, 40) : {gcd(96, 40)}')

๐Ÿ’ก ํ•˜๋…ธ์ด์˜ ํƒ‘

  • ํ•˜๋…ธ์ด์˜ ํƒ‘ : ํผ์ฆ ๊ฒŒ์ž„์˜ ์ผ์ข…์œผ๋กœ ์„ธ ๊ฐœ์˜ ๊ธฐ๋‘ฅ์„ ์ด์šฉํ•ด์„œ ์›ํŒ์„ ๋‹ค๋ฅธ ๊ธฐ๋‘ฅ์œผ๋กœ ์˜ฎ๊ธฐ๋ฉด ๋˜๊ณ , ์ œ์•ฝ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค
    - ํ•œ ๋ฒˆ์— ํ•œ๊ฐœ์˜ ์›ํŒ๋งŒ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค
    - ํฐ ์›ํŒ์ด ์ž‘์€ ์›ํŒ ์œ„์— ์žˆ์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

๐Ÿ’ก ํ•˜๋…ธ์ด์˜ ํƒ‘(์‹ค์Šต)

ํŒŒ์ด์ฌ์„ ์ด์šฉํ•ด์„œ ํ•˜๋…ธ์ด์˜ ํƒ‘ ๊ฒŒ์ž„ ์ง„ํ–‰ ๊ณผ์ •์„ ์ถœ๋ ฅ
โ€ข ํ•œ ๋ฒˆ์— ํ•œ๊ฐœ์˜ ์›ํŒ๋งŒ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
โ€ข ํฐ ์›ํŒ์ด ์ž‘์€ ์›ํŒ ์œ„์— ์žˆ์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค

# ํŒŒ์ด์ฌ์„ ์ด์šฉํ•ด์„œ ํ•˜๋…ธ์ด์˜ ํƒ‘ ๊ฒŒ์ž„ ์ง„ํ–‰ ๊ณผ์ •์„ ์ถœ๋ ฅ
# โ€ข ํ•œ ๋ฒˆ์— ํ•œ๊ฐœ์˜ ์›ํŒ๋งŒ ์˜ฎ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
# โ€ข ํฐ ์›ํŒ์ด ์ž‘์€ ์›ํŒ ์œ„์— ์žˆ์–ด์„œ๋Š” ์•ˆ ๋œ๋‹ค

# ์›ํŒ ๊ฐœ์ˆ˜, ์ถœ๋ฐœ ๊ธฐ๋‘ฅ, ๋„์ฐฉ ๊ธฐ๋‘ฅ, ๊ฒฝ์œ  ๊ธฐ๋“ฑ
def moveDisc(discCnt, fromBar, toBar, viaBar):
            # ์›ํŒ๊ฐœ์ˆ˜, ์ถœ๋ฐœ ๊ธฐ๋‘ฅ, ๋„์ฐฉ ๊ธฐ๋‘ฅ, ๊ฒฝ์œ  ๊ธฐ๋‘ฅ
    if discCnt == 1:
        print(f'{discCnt} disc : {fromBar}์—์„œ {toBar}(์œผ)๋กœ ์ด๋™!')
    else:
        # (discCnt - 1) ๊ฐœ๋“ค์„ ๊ฒฝ์œ  ๊ธฐ๋‘ฅ์œผ๋กœ ์ด๋™
        moveDisc(discCnt - 1, fromBar, viaBar, toBar)

        # discCnt๋ฅผ ๋ชฉ์  ๊ธฐ๋‘ฅ์œผ๋กœ ์ด๋™
        print(f'{discCnt} disc : {fromBar}์—์„œ {toBar}(์œผ)๋กœ ์ด๋™!')

        # (discCnt - 1) ๊ฐœ๋“ค์„ ๊ฒฝ์šฐ ๋„์ฐฉ ๊ธฐ๋‘ฅ์œผ๋กœ ์ด๋™
        moveDisc(discCnt - 1, viaBar, toBar, fromBar)


moveDisc(3, 1, 3, 2) 

๐Ÿ’ก ๋ณ‘ํ•ฉ์ •๋ ฌ

  • ๋ณ‘ํ•ฉ์ •๋ ฌ : ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋ถ„ํ• ํ•˜๊ณ  ๋ถ„ํ• ๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ •๋ ฌํ•œ ํ›„ ๋‹ค์‹œ ๋ณ‘ํ•ฉํ•˜์—ฌ ์ •๋ ฌ
nums = [8, 1, 4, 3, 2, 5, 10, 6]

def mSort(ns):
    if len(ns) < 2:
        return ns

    midIdx = len(ns) // 2
    leftNums = mSort(ns[0:midIdx])
    rightNums = mSort(ns[midIdx:len(ns)])

    mergeNums = []
    leftIdx = 0; rightIdx = 0
    while leftIdx < len(leftNums) and rightIdx < len(rightNums): # ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์™€ ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ ๋น„๊ต, 
        if leftNums[leftIdx] < rightNums[rightIdx]:
            mergeNums.append(leftNums[leftIdx])
            leftIdx += 1 # ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค +1
        else:
            mergeNums.append(rightNums[rightIdx])
            rightIdx += 1
    mergeNums = mergeNums + leftNums[leftIdx:]
    mergeNums = mergeNums + rightNums[rightIdx:]

    return mergeNums # ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ์˜ ์ธ๋ฑ์Šค +1

nums = [8, 1, 4, 3, 2, 5, 10, 6]
print(f'mSort : {mSort(nums)}')

๐Ÿ’ก ๋ณ‘ํ•ฉ์ •๋ ฌ(์‹ค์Šต)

๐Ÿ’ก 1๋ถ€ํ„ฐ 100๊นŒ์ง€์˜ ๋‚œ์ˆ˜ 10๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋‹ค์Œ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“ˆ์„ ์ƒ์„ฑ
์š”๊ตฌ ์‚ฌํ•ญ1) ๋ณ‘ํ•ฉ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ๋‚œ์ˆ˜ ์ •๋ ฌ ๋ชจ๋“ˆ ๊ตฌํ˜„
์š”๊ตฌ ์‚ฌํ•ญ2) ์œ„์˜ ๋ชจ๋“ˆ์— ์˜ค๋ฆ„์ฐจ์ˆœ๊ณผ ๋‚ด๋ฆผ์ฐจ์ˆœ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜ ์ถ”๊ฐ€

# sortMod3 ํŒŒ์ผ

def mSort(ns, asc = True):

    if len(ns) < 2:
        return ns
    midIdx = len(ns) // 2
    leftNums = mSort(ns[0:midIdx], asc=asc)
    # ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ๋˜๋Š” ๊ณณ์—๋„ ์˜ต์…˜์„ ๋„ฃ์–ด์ฃผ์–ด์•ผ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋จ โ˜…โ˜…โ˜…โ˜…โ˜…
    rightNums = mSort(ns[midIdx:len(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:]

    return mergeNums
# 1๋ถ€ํ„ฐ 100๊นŒ์ง€์˜ ๋‚œ์ˆ˜ 10๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋‹ค์Œ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“ˆ์„ ์ƒ์„ฑ
# ์š”๊ตฌ ์‚ฌํ•ญ1) ๋ณ‘ํ•ฉ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ๋‚œ์ˆ˜ ์ •๋ ฌ ๋ชจ๋“ˆ ๊ตฌํ˜„
# ์š”๊ตฌ ์‚ฌํ•ญ2) ์œ„์˜ ๋ชจ๋“ˆ์— ์˜ค๋ฆ„์ฐจ์ˆœ๊ณผ ๋‚ด๋ฆผ์ฐจ์ˆœ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜ ์ถ”๊ฐ€

import random as rd
import sortMod3 as sm

rNums = rd.sample(range(1, 101), 10)
print(f'not sorted rNums : {rNums}')
print(f'sorted rNums ASC : {sm.mSort(rNums)}')
print(f'sorted rNums DESC : {sm.mSort(rNums, asc=False)}')

๐Ÿ’ก ํ€ต์ •๋ ฌ

  • ํ€ต์ •๋ ฌ : ๊ธฐ์ค€ ๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’๊ณผ ํฐ ๊ฐ’์œผ๋กœ ๋ถ„๋ฆฌํ•œ ํ›„ ๋‹ค์‹œ ํ•ฉ์นœ๋‹ค
def qSort(ns):
    if len(ns) < 2:
        return ns

    midIdx = len(ns) // 2
    midVal = ns[midIdx]

    smallNums = []; sameNums = []; bigNums=[]

    for n in ns:
        if n < midVal:
            smallNums.append(n)
        elif n == midVal:
            sameNums.append(n)
        else:
            bigNums.append(n)

    return qSort(smallNums) + sameNums + qSort(bigNums)

nums = [8, 1, 4, 3, 2, 5, 4, 70, 6, 8]

print(qSort(nums))

๐Ÿ’ก ํ€ต์ •๋ ฌ(์‹ค์Šต)

1๋ถ€ํ„ฐ 100๊นŒ์ง€์˜ ๋‚œ์ˆ˜ 10๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋‹ค์Œ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“ˆ์„ ์ƒ์„ฑ
์š”๊ตฌ ์‚ฌํ•ญ1) ํ€ต์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ๋‚œ์ˆ˜ ์ •๋ ฌ ๋ชจ๋“ˆ ๊ตฌํ˜„
์š”๊ตฌ ์‚ฌํ•ญ2) ์œ„์˜ ๋ชจ๋“ˆ์— ์˜ค๋ฆ„์ฐจ์ˆœ๊ณผ ๋‚ด๋ฆผ์ฐจ์ˆœ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜ ์ถ”๊ฐ€

# qSort ํŒŒ์ผ

def qSort(ns, asc = True):
    if len(ns) < 2:
        return ns

    midIdx = len(ns) // 2
    midVal = ns[midIdx]

    smallNums = []; sameNums = []; bigNums = []


    for n in ns:
        if midVal > n:
            smallNums.append(n)
        elif midVal == n:
            sameNums.append(n)
        else:
            bigNums.append(n)

    if asc:
        return qSort(smallNums) + sameNums + qSort(bigNums)
    else:
        return qSort(bigNums, asc=False) + sameNums + qSort(smallNums, asc=False)
# 1๋ถ€ํ„ฐ 100๊นŒ์ง€์˜ ๋‚œ์ˆ˜ 10๊ฐœ๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๋‹ค์Œ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“ˆ์„ ์ƒ์„ฑ
# ์š”๊ตฌ ์‚ฌํ•ญ1) ํ€ต์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•œ ๋‚œ์ˆ˜ ์ •๋ ฌ ๋ชจ๋“ˆ ๊ตฌํ˜„
# ์š”๊ตฌ ์‚ฌํ•ญ2) ์œ„์˜ ๋ชจ๋“ˆ์— ์˜ค๋ฆ„์ฐจ์ˆœ๊ณผ ๋‚ด๋ฆผ์ฐจ์ˆœ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜ ์ถ”๊ฐ€

import qSort
import copy
import random

nums = random.sample(range(1, 101),10)
print(f'not sorted rNums : {nums}')
rNumsASC = copy.copy(nums)
print(f'sorted rNums ASC : {qSort.qSort(rNumsASC)}')
rNumsDESC = copy.copy(nums)
print(f'sorted rNums DESC : {qSort.qSort(rNumsDESC,asc=False)}')

๐Ÿ’ป ์ถœ์ฒ˜ : ์ œ๋กœ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ ์ทจ์—… ์Šค์ฟจ

profile
#๋ฐ์ดํ„ฐ๋ถ„์„ #ํผํฌ๋จผ์Šค๋งˆ์ผ€ํŒ… #๋ฐ์ดํ„ฐ #๋””์ง€ํ„ธ๋งˆ์ผ€ํŒ…

0๊ฐœ์˜ ๋Œ“๊ธ€