계차 수열은 두 항의 차로 이루어진 또 다른 수열이다.
# {3, 7, 13, 21, 31, 43, 57}
# => {4, 6, 8, 10, 12, 14} 을 이용해서 위 수열의 일반항 구하기
a1 = 3
num = 7
b1 = 4
d = 2
valueA = 0
valuesA = []
valueB = 0
valuesB = []
n = 1
while n <= num:
if n == 1:
valueA = a1
valueB = b1
valuesA.append(valueA)
valuesB.append(valueB)
n += 1
continue
valueA += valueB
valuesA.append(valueA)
valueB += d
valuesB.append(valueB)
n += 1
print(f'{num}번째 항의 값: {valueA}')
print(f'{num}번째까지의 값: {valuesA}')
print(f'계차 수열: {valuesB}')
>>>
7번째 항의 값: 57
7번째까지의 값: [3, 7, 13, 21, 31, 43, 57]
계차 수열: [4, 6, 8, 10, 12, 14, 16]
세 번째 항은 두 번째 항과 첫 번째 항을 더한 합이다.
num = 9
value = 0
values = []
sum = 0
valuePre2 = 0
valuePre1 = 0
n = 1
while n <= num:
if n == 1 or n == 2:
value = 1
valuePre2 = value
valuePre1 = value
values.append(value)
sum += value
n += 1
continue
value = valuePre2 + valuePre1
valuePre2 = valuePre1
valuePre1 = value
values.append(value)
sum += value
n += 1
print(f'{num}번째 항의 값: {value}')
print(f'{num}번째까지의 합: {sum}')
print(f'{num}까지의 값: {values}')
>>>
9번째 항의 값: 34
9번째까지의 합: 88
9까지의 값: [1, 1, 2, 3, 5, 8, 13, 21, 34]
정수 n까지 모든 정수를 곱한 값
⭐0! = 1
# 반복문 이용
num = 5
result = 1
for i in range(1, num+1):
result *= i
print(f'{num}! = {result}')
>>>
5! = 120
# 재귀함수 이용
def factorialFun(num):
if num == 1:
return 1
return num * factorialFun(num - 1)
print(f'{num}! = {factorialFun(num)}')
>>>
5! = 120
# 모듈 이용
import math
print(f'{num}! = {math.factorial(num)}')
>>>
5! = 120
묶으면 규칙이 보인다!
# (1) (1 2) (1 2 3) (1 2 3 4) (1 2 3 4 5) ...
num = 25
nCnt = 1
groupNum = 1
searchNum = 0
flag = True
while flag:
for i in range(1, groupNum+1):
print(f'{i}', end=' ')
nCnt += 1
if nCnt > num:
searchNum = i
flag = False
break
print()
groupNum += 1
print(f'{num}항 = {searchNum}')
>>>
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
1 2 3 4
25항 = 4
nPr : n개 중에서 r개를 선택하여 나열하는 경우의 수
(순서가 다르면 다른 경우로 취급)
⭐ nPn = n! / (n-n)! = n! / 0! = n!
numN = 7
numR = 5
result = 1
for i in range(numN, numN - numR, -1):
result *= i
print(f'nPr = {result}')
>>>
nPr = 2520
# math.factorial() 이용
import math
result = math.factorial(numN) / math.factorial(numN - numR)
print(f'nPr = {int(result)}')
>>>
nPr = 2520
nCr : n개 중에서 r을 선택하는 경우의 수(순서 무관)
numN = 5
numR = 2
resultP = 1
resultR = 1
resultC = 1
for i in range(numN, numN - numR, -1):
resultP *= i
for i in range(1, numR + 1):
resultR *= i
resultC = int(resultP / resultR)
print(f'nPr = {resultP}')
print(f'r! = {resultR}')
print(f'nCr = {resultC}')
>>>
nPr = 20
r! = 2
nCr = 10
모든 사건에서 특정 사건이 일어날 수 있는 경우의 수
모든 사건 = 표본 공간 = sample
특정 사건 = 사건 = event
조합을 이용해서 확률을 구할 수 있다.
def combination(numN, numR):
resultP = 1
resultR = 1
for i in range(numN, numN - numR, -1):
resultP *= i
for i in range(1, numR + 1):
resultR *= i
return resultP / resultR
sample = combination(7, 3)
event1 = combination(4, 2)
event2 = combination(3, 1)
probability = event1 * event2 / sample * 100
print(f'probability = {round(probability, 2)}%')
>>>
probability = 51.43%
❗ flag += 1 이용해서 두 가지 조건을 만족하는 경우 찾아내기
❗ 소인수의 지수 구할 때
temp = 0
for num in primeF:
if temp != num:
print(f'소인수의 {num}의 지수: {primeF.count(num)}')
temp = num
🚗 기초수학 파트를 마무리했다.
이론 강의 때와 비슷한 문제를 풀어보면서 복습하니까, 어떤 부분을 이해하지 못하고 넘어갔는지 알 수 있었다.
🚕 자료구조 파트 시작! 팀 스터디 과제도 할 생각이다.