해당 글은 제로베이스데이터스쿨 학습자료를 참고하여 작성되었습니다

📌최빈값

  • 빈도수가 가장 높은 데이터 찾기
    (출처:제로베이스데이터스쿨)

📝입력

import random

nums = random.choices(range(70, 100, 5), k=100)
nums.sort()
modes = {}
for num in nums:
    if num not in modes:
        modes[num] = 1
    else:
        modes[num] += 1

maxModeNum = 0
maxModeCnt = 0
for key, value in modes.items():
    if value > maxModeCnt:
        maxModeCnt = value
        maxModeNum = key
print(modes.items())
print(f'최빈값:\t{maxModeNum}')
print(f'갯수 :\t{maxModeCnt}')

🧾출력

dict_items([(70, 22), (75, 17), (80, 18), (85, 13), (90, 10), (95, 20)])
최빈값:	70
갯수 :	22

📌근삿값

  • 특정 값에 가장 가까운 값
    (출처:제로베이스데이터스쿨)

📝입력

import random

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

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

nearNum = 0
minNum = 50

for n in nums:
    absNum = abs(n - userNum)

    if absNum < minNum:
        minNum = absNum
        nearNum = n

    if absNum == 0:
        break
print(f'nearNUm: {nearNum}')

🧾출력

nums: [24, 33, 19, 26, 14, 10, 17, 39, 41, 30, 3, 23, 13, 42, 1, 5, 11, 0, 29, 47]
input number: 20
inputNum: 20
nearNUm: 19

📌평균

  • 여러 수나 양의 중간값을 갖는 수

📝입력

# 50이상 90 이하인 수의 평균
import random

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

total = 0
check = []
for n in nums:
    if 50 <= n <= 90:
        check.append(n)
        total += n

average = total / len(check)
print(f'check: {check}')
print(f'average: {average:.2f}')

🧾출력

nums: [98, 65, 43, 30, 48, 80, 56, 66, 96, 49, 34, 17, 93, 68, 99, 89, 69, 19, 13, 50, 77, 72, 24, 97, 11, 2, 35, 74, 4, 0]
check: [65, 80, 56, 66, 68, 89, 69, 50, 77, 72, 74]
average: 69.64

📌재귀함수

  • 자신을 다시 호출하는 함수
    (출처:제로베이스데이터스쿨)

📝입력

def recusion(num):
    if num > 0:
        print('*' * num)
        return recusion(num-1)
    else:
        return 1

recusion(10)

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

print(factorial(5))

🧾출력

**********
*********
********
*******
******
*****
****
***
**
*
120

유클리드 호제법

(출처:제로베이스데이터스쿨)


하노이의 탑

(출처:제로베이스데이터스쿨)

📝입력

def moveDisc(discCnt, fromBar, toBar, viaBar, hanoi):
    if discCnt == 1:
        print(f'{discCnt}disc를 {fromBar}에서 {toBar}(으)로 이동!')
        hanoi[fromBar-1] -= 1
        hanoi[toBar-1] += 1
        print(hanoi)

    else:
        moveDisc(discCnt-1, fromBar, viaBar, toBar, hanoi)

        print(f'{discCnt}disc를 {fromBar}에서 {toBar}(으)로 이동!')
        hanoi[fromBar - 1] -= 1
        hanoi[toBar - 1] += 1
        print(hanoi)

        moveDisc(discCnt-1, viaBar, toBar, fromBar, hanoi)

hanoi = [3, 0, 0]
moveDisc(3, 1, 3, 2, hanoi)

🧾출력

1disc를 1에서 3()로 이동!
[2, 0, 1]
2disc를 1에서 2()로 이동!
[1, 1, 1]
1disc를 3에서 2()로 이동!
[1, 2, 0]
3disc를 1에서 3()로 이동!
[0, 2, 1]
1disc를 2에서 1()로 이동!
[1, 1, 1]
2disc를 2에서 3()로 이동!
[1, 0, 2]
1disc를 1에서 3()로 이동!
[0, 0, 3]

병합정렬

(출처:제로베이스데이터스쿨)

📝입력

def mSort(ns):

    if len(ns) < 2:
        return ns

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

    mergeNums = []
    leftIdx = 0
    rightIdx = 0

    while leftIdx < len(leftNums) and rightIdx < len(rightNums):

        if leftNums[leftIdx] < rightNums[rightIdx]:
            mergeNums.append(leftNums[leftIdx])
            leftIdx += 1

        else:
            mergeNums.append(rightNums[rightIdx])
            rightIdx += 1

    mergeNums += leftNums[leftIdx:]
    mergeNums += rightNums[rightIdx:]

    return mergeNums


import random

nums = random.sample(range(20), 10)
print(f'not sorted rNums: {nums}')
print(f'sorted rNums: {mSort(nums)}')

🧾출력

not sorted rNums: [18, 2, 7, 13, 16, 4, 17, 19, 8, 6]
sorted rNums: [2, 4, 6, 7, 8, 13, 16, 17, 18, 19]

퀵정렬

(출처:제로베이스데이터스쿨)

📝입력

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 n < midVal:
            smallNums.append(n)
        elif n == midVal:
            sameNums.append(n)
        else:
            bigNums.append(n)

    if asc:
        return qSort(smallNums, asc=asc) + sameNums + qSort(bigNums, asc=asc)
    else:
        return qSort(bigNums, asc=asc) + sameNums + qSort(smallNums, asc=asc)


import random

nums = random.sample(range(20), 10)
print(f'unsorted nums: {nums}')
print(f'sorted nums: {qSort(nums, asc=True)}')
print(f'sorted nums: {qSort(nums, asc=False)}')

🧾출력

unsorted nums: [18, 3, 4, 5, 10, 2, 1, 17, 13, 8]
sorted nums: [1, 2, 3, 4, 5, 8, 10, 13, 17, 18]
sorted nums: [18, 17, 13, 10, 8, 5, 4, 3, 2, 1]

0개의 댓글