오늘도 문제를 풀다가 꼬이는 부분이 있었고,
그걸 풀기 위해서는 결국
숫자를 가지고 만들어진 여러 규칙들을
코드로써 작성해서 풀어내야 하는데,
이번에도 역시 외우는 것보단
이해하는 것이 중요하다고 느껴서,
수학에 관한 글을 적어보겠습니다.
들어가기에 앞서,
이 모든것들은 제가 느끼기엔 전부
숫자를 가지고 놀다가 이 숫자들로 어떤 행위를 했을때,
그것에 규칙이 있음을 발견하고,
그 규칙을 함수(변수)로써 정의하고 증명한 것들이라고 생각됩니다.
경우의 수.
먼저 경우의 수는,
어떤 사건이 일어날 수 있는 가짓수를 말합니다.
예)
주사위 1개를 굴렸을 때 나오는 숫자의 경우의 수 6
오늘이 무슨 요일인지에 대한 경우의 수 7
팩토리얼.
"팩토리얼(Factorial) == 자연수의 계승" 은
"자기 자신과 같거나 작은 모든 양의 정수를 곱한 값"
입니다.
만약 어떤 숫자 n이 있다면,
n x (n-1) x (n-2) x ... x 1
이것이 팩토리얼이고 표기는 n! 이며,
부를 땐 n팩토리얼 이라고 부릅니다.
이건 보통 경우의 수를 구할 때 쓰입니다.
예)
"n개의 다른 빵이 있고, 그 빵을 한개씩 먹으며,
다 먹을때까지 발생하는 빵을 먹는 순서" 의 경우의 수.
빵이 6개 있다면, 처음엔 경우의 수가 6개 일것이고,
1개 먹고나면 경우의 수는 5개,
마지막엔 경우의 수가 1개일 것입니다.
마치 코딩에서 for문을 중첩시키듯이,
이전에 어떤걸 먹느냐에 따라 다음 순서는 달라지기 때문에,
매 회차의 경우의 수는 곱해줘야 합니다.
6x5x4x3x2x1 = 720 = 6!
순열.
순열(Permutation) 은, 팩토리얼의 상위 개념입니다.
순서(색인)가 있는 어떠한 집합을 다른 순서로 뒤섞는 연산
을 의미합니다.
(이것은 굉장히 추상적인 개념이므로,
바로 이해가 잘 가지 않는 건 정상입니다.)
순열의 하위 개념인 팩토리얼을 예로 들면,
'어떠한 집합' 은
처음에 제시되는 경우의 수가 될 것이며,
'다른 순서' 는
순서를 진행할 때마다,
매번 제시되는 새로운 경우의 수입니다.
예를 들어,
6개의 숫자 카드 [1,2,3,4,5,6] 중
3장을 다른순서로 뽑으라고 한다면,
처음은 경우의 수가 6
다음은 겹치지 않아야 하니까 5
마지막은 4 일 것입니다.
이건 팩토리얼과 마찬가지로
매 순서가 진행할 때마다
앞선 숫자의 영향을 받는데 왜냐면,
3개의 숫자를 뽑았을 때 각각
[1 , 3 , 4 ]
[2 , 3 , 4 ]
라고 한다면, 뒤의 숫자는 같지만
먼저뽑은 숫자 때문에,
둘은 다른 경우의 수가 됩니다.
같은 이유로 또한,
[1, 3, 2 ]
[1, 2, 3 ] 은 결국 같은 숫자들을 뽑았지만
순서가 다르기 때문에 다른 경우의 수가 됩니다.
따라서 경우의 수는 6x5x4 = 120 이 되는데,
이것이 팩토리얼보다 상위 개념인 순열이고,
표기는 6P3 == nPr 이라고 표현합니다.
공식은 n! / (n-r)! 입니다.
조합.
조합(Combination) 은,
순열에서 더 확장된 개념입니다.
순열에서는 순서가 상관있게 경우의 수를 뽑았다면,
조합은 순서가 상관없습니다.
즉, 위의 빵과 카드의 예시를 대입하자면,
빵은 6개를 전부 다 먹어봤자,
순서가 상관없이 먹는것이 조합이기 때문에,
[빵1,빵2,빵3,빵4,빵5,빵6] ==[빵3,빵4,빵1,빵6,빵5,빵2]
즉, 이것의 경우의 수는 1이 됩니다.
카드도 같은 개념이지만 3장만 뽑기로 했기 때문에,
일단 순열을 구하고,
그 값에서 중복을 제외하는 것이
가장 빠른 계산 방법일 것입니다.
즉, 순열에서는 다른 경우의 수로써 정의되는
[1,2,3] 과 [2,1,3] <= 이런 경우의 수들을
하나만 남기고 제거하는 것입니다.
이러한 중복은 카드를 3개 뽑았으면 3! 만큼,
즉 r! 만큼 발생하기 때문에,
조합의 표기법은 nCr , 공식은 n! / ( (n-r)! * r! ) 입니다.
ps. java에는 팩토리얼이 없기 때문에 이걸 공식 그대로 사용할 수는 없지만,
적절한 메소드라든지, 연산식을 이용하면 간단하게 풀이할 수 있을 것입니다.
하지만 그것을 알려드리는 건 아직 제 지식 선에선 어렵기 때문에,
오늘은 여기서 마무리 짓겠습니다.
긴 글 읽어주셔서 감사하고,
이해가 안되는 부분이 있으면 꼭 알려주세요, 다시 설명해보겠습니다!
'알고리즘 및 개념 정리' 카테고리의 다른 글
등차수열, 등차수열의 일반항, 등차수열의 합. (feat. 피보나치 수열) (0) | 2024.03.30 |
---|---|
향상된 for문, for-each 문에서 주의할 점. (0) | 2024.03.09 |
imos 법 (いもす 法, imos 法) 에 대한 간략한 소개 및 설명. (0) | 2024.03.09 |
2진, 8진, 10진, 16진법과 상호 간의 변환 (0) | 2024.03.04 |
'최소 공배수' 와 '최대 공약수', '유클리드 호제법' 과 '서로소'. (1) | 2024.02.28 |