루비 조합 (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

더 쉽다....

Juyeong Lee

Read more posts by this author.