루비 조합 (Combination)
조합(combination)이란
n개의 원소를 가지는 집합에서 k개의 부분집합을 고르는 조합의 경우의 수를 이항계수라 하며, nCk
나, C(n, k)
로 나타낸다. 기호 C
는 콤비네이션이라고 읽기도 한다. 참고
루비에서 조합을 구하는 방법
def combination(n, k)
((n-k+1)..n).inject(:*) / (1..k).inject(:*)
end
combination(4, 3) # => 3
combination(6, 2) # => 15
경우의 수가 아닌 실제 값을 구하는 방법은 더 쉽다.
루비에서 기본적으로 제공하는 방법을 이용하면 된다.
[1,2,3].combination(2).to_a # => [[1, 2], [1, 3], [2, 3]]
[1,2,3,4].combination(3).to_a # => [[1, 2, 3], [1, 2, 4], [1, 3, 4], [2, 3, 4]]
루비에서 순열(permutation)을 구하는 방법
def permutation(n, k)
((n-k+1)..n).inject(:*)
end
permutation(4, 3) # => 24 (4*3*2)
permutation(6, 2) # => 30 (6*5)
[1,2,3].permutation(2).to_a # => [[1, 2], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2]]
(추가) 루비에서 제공하는 combination을 이용한 방법
[1,2,3,4,5].combination(3).size # => 10
더 쉽다....