해당 글은 제로베이스데이터스쿨 학습자료를 참고하여 작성되었습니다
- 빈도수가 가장 높은 데이터 찾기
(출처:제로베이스데이터스쿨)
📝입력
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]