주요내용
1. 피보나치 수열
2. 팩토리얼
3. 군 수열
4. 순열
5. 조합
6. 확률

# 피보나치 수열에서 n1, n2 = 1
inputN = int(input('n 입력: '))
valueN = 0
sumN = 0
valuePreN2 = 0
valuePreN1 = 0
n = 1
while n <= inputN:
if n == 1 or n == 2:
valueN = 1
valuePreN2 = valueN
valuePreN1 = valueN
sumN += valueN
n += 1
else:
valueN = valuePreN2 + valuePreN1
valuePreN2 = valuePreN1
valuePreN1 = valueN
# 한 바퀴 돌았을 때, 이전 n-2 = n-1, n-1 = n 됨
sumN += valueN
n += 1
print(f'{inputN}번째 항의 값: {valueN}')
print(f'{inputN}번째 항까지의 합: {sumN}')
출력 결과 :

# 1) 반복문 사용
inputN = int(input('n 입력: '))
result = 1
for n in range (1, inputN + 1):
result *= n
print(f'{inputN} 팩토리얼: {format(result, ',')}')
출력 결과 :
# 2) 재귀 함수 이용 ( 나 자산을 다시 호출 )
inputN = int(input('n 입력: '))
def factorialFun(n): # n = 변수
if n == 1: return 1
return n * factorialFun(n-1)
print(f'{inputN} 팩토리얼: {format(factorialFun(inputN), ',')}')
출력 결과 :
inputN = int(input('n 입력: '))
import math
print(f'{inputN} 팩토리얼: {format(math.factorial(inputN), ',')}')
출력 결과 :


inputN = int(input('n항 입력: '))
flag = True
n = 1
nCnt = 1
# nCnt = 항의 순번(개수) => nCnt < inputN (should be)
searchNC = 0 # searchNP = 찾고자 하는 항의 분자값
searchNP = 0 # searchNP = 찾고자 하는 항의 분모값
while flag:
for i in range(1, n + 1): # for문은 '군'에 대한 반복문
if i == n:
print(f'{i}/{n-i+1}', end='')
else:
print(f'{i}/{n - i + 1},', end='')
nCnt += 1
if nCnt > inputN:
searchNC = i
searchNP = n - i + 1
flag = False
break
print()
n += 1
print('{}항: {}/{}'.format(inputN, searchNC, searchNP))
출력 결과 :
순열은 순서룰 고려함
e.g. {1, 2} != {2, 1}



n = int(input('친구 수 입력: '))
result = 1
for i in range(1, n):
# n+1이 아닌 n까지 한 이유는 n-1까지만 구하면 되기 때문
result *= i
print(f'result: {result}')
출력 결과 :
순열과 다르게 조합은 순서룰 고려하지 않음
e.g. {1, 2} == {2, 1}

# n개에서 r개를 택하는 경우의 수(순서 상관 x)
# nPr > nCr = nPr/r! = n!/r!(n-r)! 단, 0 < r <= n
# nPr = n!/(n-r)!
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
resultP = 1
resultR = 1
resultC = 1
for n in range (numN, numN - numR, -1):
print(f'n: {n}')
resultP *= n
print(f'resultP: {resultP}')
for n in range(numR, 0, -1):
print(f'n: {n}')
resultR *= n
print(f'resultR: {resultR}')
resultC = resultP / resultR
print(f'resultC: {int(resultC)}')
# 실습
# 카드 5장 중 2장을 선택했을 떄, 삼각형과 사각형이 동시에 선택될 수 있는 확률?
# 동그라미, 세모, 네모, 오각형, 육각형
# 5C2
result = (1/resultC) * 100
print(f'{round(result,2)}%')
출력 결과 :

def proFun():
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
resultP = 1
resultR = 1
resultC = 1
for i in range(numN, numN - numR, -1):
resultP *= i
for i in range(numR, 0, -1):
resultR *= i
resultC = int(resultP/resultR)
return resultC
sample = proFun()
print('sample: {}'.format(sample))
print('='*30)
event1 = proFun()
print('event1: {}'.format(event1))
print('='*30)
event2 = proFun()
print('event2: {}'.format(event2))
print('='*30)
probability = round(((event1 * event2)/sample) *100, 2)
print(f'probability: {probability}%')
출력 결과 :
(case1)(case2)