Study_note(zb_data)/Python

์Šคํ„ฐ๋”” ๋…ธํŠธ (์•Œ๊ณ ๋ฆฌ์ฆ˜ 1-18)_0724

KloudHyun 2023. 7. 31. 01:03

๐Ÿ“Œ ์„ ํ˜•๊ฒ€์ƒ‰?

  • ์„ ํ˜•์œผ๋กœ ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์Šค์บ”ํ•˜๋ฉด์„œ ์›ํ•˜๋Š” ๊ฐ’์„ ์ฐพ๋Š”๋‹ค
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): #๋งŒ์•ฝ n์˜ ๊ฐ’์ด datas์˜ ๊ธธ์ด์˜ ๊ฐ’๊ณผ ๊ฐ™์•„์งˆ ๊ฒฝ์šฐ
        searchResultIdx = -1 #๋ชป์ฐพ์•˜์œผ๋ฏ€๋กœ -1 ์ถœ๋ ฅ
        break #๋ฐ”๋กœ break

    elif datas[n] == searchData: #datas n์˜ ๊ฐ’์ด ์ฐพ์œผ๋ ค๋Š” data๊ฐ’๊ณผ ๊ฐ™๋‹ค๋ฉด
        searchResultIdx = n # ์ฐพ์œผ๋ ค๋Š” data๊ฐ’์˜ idx๋Š” n์˜ ๊ฐ’์ด๋‹ค
        break #๋ฐ”๋กœ break

    n+=1 #๋ชป์ฐพ์„ ๋•Œ ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง€์ง€ ์•Š๋„๋ก n์„ 1์”ฉ ๋”ํ•ด์ค€๋‹ค

print(f'searchResultIdx = {searchResultIdx}')

>>>>
datas : [3, 2, 5, 7, 9, 1, 0, 8, 6, 4]
datas length : 10
์ฐพ์œผ๋ ค๋Š” ์ˆซ์ž ์ž…๋ ฅ : 10
searchResultIdx = -1

๐Ÿ“Œ ๋ณด์ดˆ๋ฒ•

  • ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ์ฐพ์œผ๋ ค๋Š” ๊ฐ’์„ ์ถ”๊ฐ€ํ•ด์„œ ์ฐพ๋Š” ๊ณผ์ •์„ ๊ฐ„๋žตํ™” ํ•œ๋‹ค.

์ถœ์ฒ˜ : ์ œ๋กœ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ ์Šค์ฟจ

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 #๊ธฐ๋ณธ์œผ๋กœ idx๋ฅผ ์ง€์ •ํ•œ๋‹ค

datas.append(searchData) #๊ธฐ๋ณธ์ ์œผ๋กœ ์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž๋ฅผ datas์— appendํ•œ๋‹ค.

n = 0

while True:

    if datas[n] == searchData: #๋งŒ์•ฝ datas[n]์˜ ๋ฐ์ดํ„ฐ๊ฐ’์ด ์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž์™€ ๊ฐ™๊ณ 
        if n != len(datas) - 1: #datas์˜ ๊ธธ์ด๊ฐ€ n์˜ ๊ฐ’๊ณผ ๊ฐ™์ง€์•Š๋‹ค๋ฉด
            searchResultIdx = n #์ž…๋ ฅ๋ฐ›์€ ์ˆซ์ž์˜ idx๋Š” n์ด๋‹ค
        break
    n+=1 #๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง€์ง€ ์•Š๋„๋ก n์„ ๊ณ„์† ๋”ํ•ด์ค€๋‹ค
print(f'datas : {datas}')
print(f'datas length : {len(datas)}')
print(f'searchResultIdx : {searchResultIdx}')
>>>>
datas : [3, 2, 5, 7, 9, 1, 0, 8, 6, 4]
datas length : 10
์ฐพ์œผ๋ ค๋Š” ์ˆซ์ž ์ž…๋ ฅ : 10
datas : [3, 2, 5, 7, 9, 1, 0, 8, 6, 4, 10]
datas length : 11
searchResultIdx : -1

๐Ÿ“Œ ์ด์ง„๊ฒ€์ƒ‰

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

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

searchData = int(input('search data : '))
searchResultIdx = -1
staIdx = 0

endIdx = len(datas) - 1 # index = 10
midIdx = (staIdx + endIdx) // 2 # 0 + 10 // 2 -> 5
midVal = datas[midIdx] # data[5]์˜ ๊ฐ’

print(f'midIdx : {midIdx}')
print(f'midVal : {midVal}')
n = 0

while searchData <= datas[len(datas) - 1] and searchData >= datas[0]:
# ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ <= datas์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ and ์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ >= datas์˜ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ
# ์ฆ‰ ๋ฐ์ดํ„ฐ๊ฐ€ datas ๊ฐ’์˜ ์‚ฌ์ด์— ์žˆ์„ ๋•Œ

    if searchData == datas[len(datas) - 1]: #์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๊ฐ€ datas์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ’๊ณผ ๊ฐ™์„ ๋•Œ
        searchResultIdx = len(datas) - 1 #๋ฐ์ดํ„ฐ์˜ Idx๋Š” datas์˜ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์˜ idx์™€ ๊ฐ™๋‹ค
        break #๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง€์ง€ ์•Š๋„๋ก break

    if searchData > midVal: #์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๊ฐ„๊ฐ’๋ณด๋‹ค ํด ๋•Œ
        staIdx = midIdx #์‹œ์ž‘์€ ์ค‘๊ฐ„์˜ idx๊ฐ’
        midIdx = (staIdx + endIdx) // 2 #์ค‘๊ฐ„์€ ์‹œ์ž‘๊ณผ ๋ idx๋ฅผ ๋”ํ•˜๊ณ  2๋กœ ๋‚˜๋ˆˆ ๋ชซ
        midVal = datas[midIdx] #์ค‘๊ฐ„์˜ ๋ฐธ๋ฅ˜๋Š” datas์— ๊ตฌํ•œ midIdx๋ฅผ ๋„ฃ์€ ๊ฐ’์ด๋œ๋‹ค
        print(f'midIdx : {midIdx}')
        print(f'midVal : {midVal}')

    elif searchData < midVal: #์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค‘๊ฐ„๊ฐ’๋ณด๋‹ค ์ž‘์„ ๋•Œ
        endIdx = midIdx #๋์˜ ๊ฐ’์€ ์ค‘๊ฐ„๊ฐ’์ด ๋œ๋‹ค
        midIdx = (staIdx + endIdx) // 2 #์‹œ์ž‘๊ฐ’๊ณผ ๋์˜ ๊ฐ’์˜ idx๋ฅผ ๋”ํ•˜๊ณ  2๋กœ ๋‚˜๋ˆˆ ๋ชซ
        midVal = datas[midIdx] # ์ค‘๊ฐ„์˜ ๋ฐธ๋ฅ˜๋Š” datas์— ๊ตฌํ•œ midIdx๋ฅผ ๋„ฃ์€ ๊ฐ’์ด๋‹ค.
        print(f'midIdx : {midIdx}')
        print(f'midVal : {midVal}')

    elif searchData == midVal: #์ž…๋ ฅ๋ฐ›์€ ๋ฐ์ดํ„ฐ์™€ ์ค‘๊ฐ„๊ฐ’์ด ๊ฐ™์„ ๋•Œ
        searchResultIdx = midIdx #๋ฐ์ดํ„ฐ์˜ Idx๋Š” ์ค‘๊ฐ„๊ฐ’์˜ Idx์™€ ๊ฐ™๋‹ค
        break

print(f'searchResultIdx : {searchResultIdx}')
>>>>
datas : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
datas length : 11
search data : 4
midIdx : 5
midVal : 6

midIdx : 2
midVal : 3

midIdx : 3
midVal : 4
searchResultIdx : 3

๐Ÿ“Œ ์ˆœ์œ„

  • ์ˆ˜์˜ ํฌ๊ณ  ์ž‘์Œ์„ ์ด์šฉํ•˜์—ฌ ์ˆ˜์˜ ์ˆœ์„œ๋ฅผ ์ •ํ•˜๋Š” ๊ฒƒ์„ ์ˆœ์œ„๋ผ๊ณ  ํ•œ๋‹ค.

์ถœ์ฒ˜ : ์ œ๋กœ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ ์Šค์ฟจ

import random

nums = random.sample(range(50, 101), 20) # 50~100 ์‚ฌ์ด์˜ ๋‚œ์ˆ˜ 20๊ฐœ๋ฅผ ๋ฝ‘์•„๋ƒ„
ranks = [0 for i in range (20)] #๊ธธ์ด๊ฐ€ 20์ด๊ณ  ๋ฐ์ดํ„ฐ์˜ ๊ฐ’์€ 0์ธ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋งŒ๋“ค์–ด์ง
print(f'nums : {nums}')
print(f'ranks : {ranks}')

for idx, num1 in enumerate(nums): #random nums์˜ idx, num1์„ ๋ฝ‘์•„์˜จ๋‹ค.
    for num2 in nums: #์ค‘์ฒฉ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ num2๋ฅผ ๋ฝ‘์•„์˜จ๋‹ค. (๊ธฐ์ค€์ด๋˜๋Š” ์ˆซ์ž์™€ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•จ)
        if num1 < num2: #num2๊ฐ€ num1๋ณด๋‹ค ํฌ๋‹ค๋ฉด (๊ธฐ์ค€์ด ๋˜๋Š” num1๋ณด๋‹ค num2๊ฐ€ ํฌ๋‹ค๋ฉด)
            ranks[idx] += 1 #rank์•ˆ์— ์žˆ๋Š” ํ•ด๋‹น idx ์ˆซ์ž์— 1์”ฉ ๊ณ„์†ํ•ด์„œ ๋”ํ•œ๋‹ค

print(f'nums : {nums}')
print(f'ranks : {ranks}')

for idx, num in enumerate(nums): #for๋ฌธ์„ ํ†ตํ•ด idx, num์„ ์ถ”์ถœํ•˜๊ณ 
    print(f'num : {num} \t rank : {ranks[idx] + 1}') #๊ฐ๊ฐ์˜ ์ˆœ์œ„์™€ ์ˆซ์ž๋ฅผ ๋‚˜์—ดํ•ด์ค€๋‹ค

>>>>
nums : [59, 71, 98, 67, 85, 69, 91, 72, 77, 57, 97, 99, 74, 53, 86, 66, 58, 89, 78, 51]
ranks : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
nums : [59, 71, 98, 67, 85, 69, 91, 72, 77, 57, 97, 99, 74, 53, 86, 66, 58, 89, 78, 51]
ranks : [15, 11, 1, 13, 6, 12, 3, 10, 8, 17, 2, 0, 9, 18, 5, 14, 16, 4, 7, 19]
num : 59 	 rank : 16
num : 71 	 rank : 12
num : 98 	 rank : 2
num : 67 	 rank : 14
num : 85 	 rank : 7
num : 69 	 rank : 13
num : 91 	 rank : 4
num : 72 	 rank : 11
num : 77 	 rank : 9
num : 57 	 rank : 18
num : 97 	 rank : 3
num : 99 	 rank : 1
num : 74 	 rank : 10
num : 53 	 rank : 19
num : 86 	 rank : 6
num : 66 	 rank : 15
num : 58 	 rank : 17
num : 89 	 rank : 5
num : 78 	 rank : 8
num : 51 	 rank : 20

๐Ÿ“Œ ์ˆœ์œ„ ํŽธ์ฐจ

#๋ชจ๋“ˆ์ฝ”๋“œ
class RankDeviation:

    def __init__(self, mss, ess): #์ค‘๊ฐ„๊ณ ์‚ฌ, ๊ธฐ๋ง๊ณ ์‚ฌ score๋ฅผ ๋ฐ›๋Š”๋‹ค
        self.midStuScos = mss #์ค‘๊ฐ„๊ณ ์‚ฌ ์ ์ˆ˜
        self.endStuScos = ess #๊ธฐ๋ง๊ณ ์‚ฌ ์ ์ˆ˜
        self.midRanks = [0 for i in range(len(mss))] #์ค‘๊ฐ„๊ณ ์‚ฌ ์ˆœ์œ„
        self.endRanks = [0 for i in range(len(mss))] #๊ธฐ๋ง๊ณ ์‚ฌ ์ˆœ์œ„
        self.rankDeviation = [0 for i in range(len(mss))] #ํŽธ์ฐจ

    def setRank(self, ss, rs): #์ˆœ์œ„๋ฅผ ๊ฒฐ์ •์ง“๋Š”๋‹ค
        for idx, sco1 in enumerate(ss):
            for sco2 in ss:
                if sco1 < sco2:
                    rs[idx] += 1

    def setMidRank(self): #์ค‘๊ฐ„๊ณ ์‚ฌ ์„ฑ์  ๋žญํฌ๋ฅผ setRank์— ๋˜์ง„๋‹ค
        self.setRank(self.midStuScos, self.midRanks)

    def getMidRank(self):
        return self.midRanks

    def setEndRank(self): #๊ธฐ๋ง๊ณ ์‚ฌ ์„ฑ์  ๋žญํฌ๋ฅผ setRank์— ๋˜์ง„๋‹ค
        self.setRank(self.endStuScos, self.endRanks)

    def getEndRank(self):
        return self.endRanks

    def printRankDeviation(self):

        for idx, mRank in enumerate(self.midRanks): #์ค‘๊ฐ„๊ณ ์‚ฌ ์„ฑ์ ์„ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๋Š”๋‹ค
            deviation = mRank - self.endRanks[idx] #ํŽธ์ฐจ๋Š” ์ค‘๊ฐ„๊ณ ์‚ฌ ์„ฑ์  - ๊ธฐ๋ง๊ณ ์‚ฌ ์„ฑ์ ์„ ์ ˆ๋Œ“๊ฐ’์œผ๋กœ ์”Œ์›Œ์ค€๋‹ค

            if deviation > 0:
                deviation = '↑' + str(abs(deviation))

            elif deviation < 0:
                deviation = '↓' + str(abs(deviation))

            else:
                deviation = '=' + str(abs(deviation))

            print(f'mid_rank : {mRank} \t end_rank : {self.endRanks[idx]} \t Deviation : {deviation}')
#์‹คํ–‰์ฝ”๋“œ
import rankMod as rm
import random

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

rd = rm.RankDeviation(midStuScos, endStuScos)
rd.setMidRank()
print(f'midStuScos : {midStuScos}')
print(f'midRank : {rd.getMidRank()}')

rd.setEndRank()
print(f'endStuScos : {endStuScos}')
print(f'endRank : {rd.getEndRank()}')

rd.printRankDeviation()
>>>>
midStuScos : [86, 67, 59, 84, 76, 51, 62, 74, 66, 70, 77, 75, 95, 60, 69, 53, 61, 78, 94, 97]
midRank : [3, 12, 17, 4, 7, 19, 14, 9, 13, 10, 6, 8, 1, 16, 11, 18, 15, 5, 2, 0]
endStuScos : [99, 92, 96, 50, 57, 78, 77, 79, 80, 52, 87, 70, 65, 95, 60, 55, 88, 81, 94, 56]
endRank : [0, 4, 1, 19, 15, 10, 11, 9, 8, 18, 6, 12, 13, 2, 14, 17, 5, 7, 3, 16]
mid_rank : 3 	 end_rank : 0 	 Deviation : ↑3
mid_rank : 12 	 end_rank : 4 	 Deviation : ↑8
mid_rank : 17 	 end_rank : 1 	 Deviation : ↑16
mid_rank : 4 	 end_rank : 19 	 Deviation : ↓15
mid_rank : 7 	 end_rank : 15 	 Deviation : ↓8
mid_rank : 19 	 end_rank : 10 	 Deviation : ↑9
mid_rank : 14 	 end_rank : 11 	 Deviation : ↑3
mid_rank : 9 	 end_rank : 9 	 Deviation : =0
mid_rank : 13 	 end_rank : 8 	 Deviation : ↑5
mid_rank : 10 	 end_rank : 18 	 Deviation : ↓8
mid_rank : 6 	 end_rank : 6 	 Deviation : =0
mid_rank : 8 	 end_rank : 12 	 Deviation : ↓4
mid_rank : 1 	 end_rank : 13 	 Deviation : ↓12
mid_rank : 16 	 end_rank : 2 	 Deviation : ↑14
mid_rank : 11 	 end_rank : 14 	 Deviation : ↓3
mid_rank : 18 	 end_rank : 17 	 Deviation : ↑1
mid_rank : 15 	 end_rank : 5 	 Deviation : ↑10
mid_rank : 5 	 end_rank : 7 	 Deviation : ↓2
mid_rank : 2 	 end_rank : 3 	 Deviation : ↓1
mid_rank : 0 	 end_rank : 16 	 Deviation : ↓16

๐Ÿ“Œ ๋ฒ„๋ธ”์ •๋ ฌ

  • ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ธ์ ‘ํ•˜๋Š” ์ธ๋ฑ์Šค์˜ ๊ฐ’์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋น„๊ตํ•˜๋ฉด์„œ ํฐ ์ˆซ์ž๋ฅผ ๊ฐ€์žฅ ๋์œผ๋กœ ์˜ฎ๊ธฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ถœ์ฒ˜ : ์ œ๋กœ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ ์Šค์ฟจ

nums = [10, 2, 7, 21, 0]
print(f'not sorted nums : {nums}')

length = len(nums) - 1

for i in range (length):
#๋ฒ”์ฃผ ๋‚ด์˜ ์ˆซ์ž ์•ˆ์—์„œ (๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋Š” ์„ ํƒx)
    for j in range (length - i):
    #์ด๋ฏธ ๊ตํ™˜๋œ ๋…ธ๋“œ๋Š” ๋งจ ๋’ค ์ชฝ์œผ๋กœ ๋ฐฐ์น˜๊ฐ€ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—
        if nums[j] > nums[j+1]:
        #J์ธ๋ฑ์Šค์— ์žˆ๋Š” ๊ฐ’์ด 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}')
>>>>
not sorted nums : [10, 2, 7, 21, 0]
[2, 10, 7, 21, 0]
[2, 7, 10, 21, 0]
[2, 7, 10, 21, 0]
[2, 7, 10, 0, 21]

[2, 7, 10, 0, 21]
[2, 7, 10, 0, 21]
[2, 7, 0, 10, 21]

[2, 7, 0, 10, 21]
[2, 0, 7, 10, 21]

[0, 2, 7, 10, 21]

sorted nums : [0, 2, 7, 10, 21]

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

  • ํ‚ค ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด๋ณด๊ธฐ
#๋ชจ๋“ˆ์ฝ”๋“œ
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
#์‹คํ–‰์ฝ”๋“œ
import random as rd
import sortMod as sm

students = []

for i in range(20):
    students.append(rd.randint(170, 185))

print(f'students: {students}')

sortedStudents = sm.bubbleSort(students)

print(f'students: {students}')
print(f'sortedStudents: {sortedStudents}')
>>>>
students: [176, 173, 176, 173, 181, 182, 172, 178, 182, 184, 177, 179, 180, 171, 179, 181, 175, 176, 174, 179]
students: [176, 173, 176, 173, 181, 182, 172, 178, 182, 184, 177, 179, 180, 171, 179, 181, 175, 176, 174, 179]
sortedStudents: [171, 172, 173, 173, 174, 175, 176, 176, 176, 177, 178, 179, 179, 179, 180, 181, 181, 182, 182, 184]

๐Ÿ“Œ ์‚ฝ์ž…์ •๋ ฌ

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

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

    while nums[i2] > cNum and i2 >= 0: #i2์˜ ๊ฐ’์ด ์ด์ „์— ์ •๋ ฌ๋˜์–ด์žˆ๋Š” ์ˆซ์ž๋ณด๋‹ค ํฌ๋‹ค๋ฉด
        nums[i2 + 1] = nums[i2] #๋‘๊ฐœ์˜ ๊ฐ’์„ ์น˜ํ™˜
        i2 -= 1

    nums[i2 + 1] = cNum

    print(f'nums:{nums}')

print()
#descending
nums = [0, 5, 2, 10, 1]
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}')
>>>>
nums:[5, 10, 2, 1, 0]
nums:[2, 5, 10, 1, 0]
nums:[1, 2, 5, 10, 0]
nums:[0, 1, 2, 5, 10]

nums:[5, 0, 2, 10, 1]
nums:[5, 2, 0, 10, 1]
nums:[10, 5, 2, 0, 1]
nums:[10, 5, 2, 1, 0]

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

์ถœ์ฒ˜ : ์ œ๋กœ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ ์Šค์ฟจ

#๋ชจ๋“ˆ์ฝ”๋“œ
class SortNumbers:

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

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

    def setSort(self):

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

            if self.isAsc:
                while self.nums[i2] > cNum and i2 >=0:
                    self.nums[i2 + 1] = self.nums[i2]
                    i2 -= 1

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

            self.nums[i2 + 1] = cNum

    def getSortedNumbers(self):
        return self.nums

    def getMinNumber(self):
        if self.isAsc:
            return self.nums[0]
        else:
            return self.nums[len(self.nums) - 1]

    def getMaxNumber(self):
        if self.isAsc:
            return self.nums[len(self.nums) - 1]
        else:
            return self.nums[0]
#์‹คํ–‰์ฝ”๋“œ
import random
import sortMod as sm

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

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

# ์˜ค๋ฆ„์ฐจ์ˆœ(ascending)
sn.setSort()
sortedNumbers = sn.getSortedNumbers()
print(sortedNumbers)

# ๋‚ด๋ฆผ์ฐจ์ˆœ(descending)
sn.isAscending(False)
sn.setSort()
sortedNumbers = sn.getSortedNumbers()
print(sortedNumbers)

# min & max
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):
    minIdx = i #์ตœ์†Œ๊ฐ’์ด ๋“ค์–ด์žˆ๋Š” index ์„ค์ •
    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}')
>>>>
nums : [4, 2, 5, 1, 3]
nums : [1, 2, 5, 4, 3]
nums : [1, 2, 5, 4, 3]
nums : [1, 2, 3, 4, 5]
nums : [1, 2, 3, 4, 5]
final nums : [1, 2, 3, 4, 5]

๐Ÿ“Œ ์ตœ๋Œ“๊ฐ’

์ถœ์ฒ˜ : ์ œ๋กœ๋ฒ ์ด์Šค ๋ฐ์ดํ„ฐ ์Šค์ฟจ

class MaxAlgorithm:

    def __init__(self, ns): #๊ฐ์ฒด ์ดˆ๊ธฐํ™”
        self.nums = ns
        self.maxNum = 0

    def getMaxNum(self):

        self.maxNum = self.nums[0]

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

        return self.maxNum

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

    def __init__(self, cs):
        self.chars = cs
        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

nums = [-2, -4, 5, 7, 10, 0, 8, 20, -11]

mn = MinAlgorithm(nums)
minNum = mn.getMinnum()
print(f'minNum : {minNum}')
#์•„์Šคํ‚ค ์ฝ”๋“œ ๊ฐ’ ์ตœ์†Œ
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'])
mc = MinAlgorithm(chars)
minChar = mc.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]
mn = MaxAlgorithm(nums)
mn.setMaxIdxAndNum()
maxNumIdx = mn.getMaxNumIdx()
maxNum = mn.getMaxNum()

print(f'maxNum Idx : {maxNumIdx}')
print(f'maxNum : {maxNum}')

indexes = [0 for i in range(maxNum + 1)]
print(f'indexes : {indexes}')
print(f'indexes length : {len(indexes)}')

for n in nums:
    indexes[n] = indexes[n] + 1 #ํ•ด๋‹น๋˜๋Š” indexes์˜ ์ธ๋ฑ์Šค์— +1

print(f'indexes : {indexes}')

maxAgo = MaxAlgorithm(indexes)
maxAgo.setMaxIdxAndNum()
maxNum = maxAgo.getMaxNum()
maxNumIdx = maxAgo.getMaxNumIdx()
print(f'{maxNum}')
print(f'{maxNumIdx}')
>>>>
maxNum Idx : 9
maxNum : 17
indexes : [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
indexes length : 18
indexes : [0, 1, 0, 1, 0, 0, 1, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1]
4
7