여러 개의 항을 묶었을 때 규칙성을 가지는 수열
1,1,2,1,2,3,1,2,3,4,1,2,3,4,5......
이는 (1)(1,2)(1,2,3)(1,2,3,4)(1,2,3,4,5)로 묶을 수 있다.
군수열에서 특정 항 위치까지 구하는 함수
list = [1,1,2,1,2,3,1,2,3,4,1,2,3,4,5]
n = int(input('n 항 입력 : '))
print('\n')
step = 1 #항
group = 1 #군
flag = True
while (flag):
print(f'{group}군 : ',end = ' ')
for i in range(group):
print(i+1,end = ' ')
if (step >= n):
flag = False
break
step += 1
group += 1
print('\n')```
n개에서 r개를 뽑아 나열하는 것을 순열이라 한다.
만약 1,2,3,4,5 카드가 있다 하자.
여개서 3개 를 뽑는다하면 뽑을 때마다 숫자가 뽑힐 경우의 수는 5,4,3 이 될 것이다.
이는 연달아 일어나는 사건으로 곱의 법칙을 적용해 5x4x3 = 60가지의 경우의 수가 나온다.
순열은 Permutation로 P기호를 사용해 다음과 같이 나타낸다.
(n개에서 r개를 뽑아 나열하는 경우) (단, 0 < r <= n)
= 5 x 4 x 3 (5!/2!)
# n과 r을 입력 받고 순열 값 구하기
n = int(input('n 입력 : '))
r = int(input('r 입력 : '))
result = 1
for i in range(n,n-r,-1):
print(f'n 값 : {i}')
result *= i
print(result)
원순열이란 시작과 끝의 구분이 없는 순열이다.
예시로 4명의 친구가 원탁 테이블에 앉을 수 있는 경우의 수를 구해보자.
이렇게 총 6가지의 경우의 수가 나온다.
즉, 4의 원 순열을 구하면 3 x 2 x 1 = 6으로 (4-1!)이다.
n개에서 r개를 뽑아 나열하는 것으로 순열과 비슷해보이지만
순열은 순서를 고려한 경우의 수이고
조합은 순서를 고려하지 안흔 경우의 수이다.
예를 들어 빨, 주 ,노초파남보 7개의 구슬 중 3개를 뽑는 경우를 생각해보자.
만약 순서가 중요하면 7 x 6 x 5 = 210 가지의 경우의 수가 나올 것이다.
하지만 단순히 3개만 뽑는 것이라면, 뽑은 구슬 3개의 배열은 상관이 없어지는 것이다.
그래서 7 x 6 x 5 / 3 x 2 x 1 = 35가 나오게 된다.
조합은 Combination으로 C 기호를 사용해 다음과 같이 나타낸다.
(n개에서 r개를 뽑아 나열하는 경우) (단, 0 < r <= n)
= (5 x 4 x 3) / (3 x 2 x 1)
식을 나열해보면 = 가 되어 = 인 것을 알수 있다.
# n과 r을 입력 받고 조합 값 구하기
n = int(input('n 입력 : '))
r = int(input('r 입력 : '))
print('\n')
tmp1 = 1
for i in range(n,n-r,-1):
print(f'n 값 : {i}')
tmp1 *= i
print('\n')
tmp2 = 1
for j in range(r,0,-1):
print(f'r 값 : {j}')
tmp2 *= j
print('\n')
result = int(tmp1/tmp2)
print(result)
모든 사건에서 특정 사건이 일어날 수 있는 수를 나타낸 것이다.
동전 던지기에서 확률을 예로 보면
• 모든 사건 : 앞, 뒤 => 2가지 경우
• 특정 사건 : 앞 => 1가지 경우, 뒤 => 1가지 경우
• 확률: 앞 => 1/2 , 뒤 => 1/2
확률은 보통 조합을 이용해서 알아낸다.