n!(Factorial)
은 n
개의 요소에 대한 모든 경우의 수와 같다.5! === 5 * 4 * 3 * 2 * 1
순열
.조합
이라고 한다.Permutation
의 약어인 P
로 표현한다.nPr = n! / (n - r)!
로 표현 할 수 있다.n
은 요소의 총 갯수, r
은 선택한 갯수를 뜻 한다.n = 5
, r = 3
이 된다.5P3
은 5! / (5 - 3)!
= 5! / 2!
= 120 / 2
= 60
이 된다.Combination
의 약어인 C
로 표현한다.nCr = n! / (r! * (n - r)!)
로 표현 할 수 있다.n
은 요소의 총 갯수, r
은 그룹의 갯수를 뜻 한다.n = 5
, r = 3
이 된다.5C3
은 5! / (3! * (5 - 3)!)
= 5! / (3! * 2!)
= 120 / 6 * 2
= 120 / 12
= 10
이 된다.LCM(최소공배수)
를 활용 할 수 있다.어떤 시간인
t
에 물건을n
개 만들어내는 기계들이 있다.
이 기계들이 동시에 물건을 만들어내는 타이밍에 공장의 가동이 종료된다.
이 때, 만들어진 물건의 갯수는 몇개인가?
t
의 최소 공배수를 찾아 각 기계들의 n
을 그 최소공배수/ t
만큼 곱하여 더해주면 된다.GCD(최대공약수)
를 활용 할 수 있다.가로가
x
, 세로가y
인 어떤 직사각형의 공간에 일정한 간격으로 조명을 최소 갯수로 설치할 때, 몇개의 조명이 필요한가?
x
, y
의 길이를 가진 변에 일정하게 조명을 설치하기 위해서는 서로 동일하게 나눠지는 길이를 구해야한다.x
, y
가 각각 14, 28의 직사각형이라면, 최대공약수는 14가 되고, 가로에는 1개, 세로에는 2개를 두는 것으로 총 6개로 일정한 간격에 조명을 설치 할 수 있게된다.(x / 최대공약수 + y / 최대공약수) * 2
A
, B
라고 하고 나눈 나머지를 C
라고 할때,B
를 C
로 다시 나눠 나머지를 구하고, B
에서 C
를 나눈 나머지로 다시 C
를 나누고, 그 나머지로 C
를 나누고...// 100과 15의 최대공약수 구하기
100 % 15 === 10
15 % 10 === 5
10 % 5 === 0
// 둘의 최대공약수는 5가 된다.
// 반복문 사용하기
const gcd = (a, b) => {
let c = 0;
while(b !== 0){
c = a % b
a = b
b = c
}
return a
}
// 재귀 사용하기
const gcd = (a, b) => {
if(b === 0) return a
else return gcd(b / a % b)
}
// 삼항연산자로 표현하기
const gcd = (a, b) => b ? gcd(b / a % b) : a
→ A, B
값을 계속 스왑해준다고 생각하면 된다.
LCM = A * B / GCD(A, B)