순열
[C++] 순열 / 조합 구하기 (next_permutation/prev_permutation 함수)
순열 next_permutation C++의 algorithm 헤더에는 n개의 원소의 순열을 구할 수 있는 next_permutation이라는 함수가 있다. 기본은 오름차순이다, 즉 내림차순인 prev_permutation을 사용하기 위해서는 내림차순으로 정렬 되어있어야 한다. 중복이 있는 원소들은 제외하고 순열을 만들어준다. // default bool next_permutation (BidirectionalIterator first, BidirectionalIterator last); // custom bool next_permutation (BidirectionalIterator first, BidirectionalIterator last, Compare comp); next_permutation ..
[알고리즘] 순열과 조합의 차이
순열과 조합의 가장 큰 차이는 순서가 있고 없고 이다. 예를 들어 자전거의 번호가 있는 자물쇠를 연다고 가정해보자. 자물쇠 번호가 1234라고 한다면 순서에 대한 고려 없이 4321을 입력하면 자물쇠는 열리지 않는다. 이를 순열이라고 한다. (순서가 있음) 또 다른 예시로 닭가슴살 샐러드를 가정해보자. 닭가슴살 샐러드의 재료는 닭가슴살, 양상추, 소스, 토마토라고 한다면 우리는 샐러드를 담을 때 닭가슴살을 처음으로 넣고 두 번째는 양상추... 이런 식으로 넣지 않고 그냥 재료에 맞게 넣는다. 이를 조합이라고 한다. (순서가 없음) 이제 수학적으로 다가가 보자 1 2 3 4 배열이 있고 2가지 경우를 뽑는다고 가정해보자 순열의 경우에는 순서가 중요하기에 하기와 같이 다 뽑아 버린다. 1 2 1 3 1 4 ..
[수학] 순열, 조합 공식 총 정리
팩토리얼 (!) 서로 다른 n개를 나열하는 경우의 수를 의미한다. 기호로는 n! 으로 표기하고 계산은 n부터 1씩 줄여나가면서 1일 될 때까지의 모든 수를 곱한다. 순열 (nPr) 서로 다른 n개 중에 r개를 선택하는 경우의 수를 의미한다. (순서 상관 있음) 조합 (nCr) 서로 다른 n개 중에 r개를 선택하는 경우의 수를 의미한다. (순서 상관 없음) 중복 순열 (nπr) 중복 가능한 n개 중에서 r개를 선택하는 경우의 수를 의미한다. (순서 상관 있음) 중복 조합 (nHr) 중복 가능한 n개 중에서 r개를 선택하는 경우의 수를 의미한다. (순서 상관 없음) 같은 것이 있는 순열 나열하는 원소의 팩토리얼에 중복된 원소들의 팩토리얼을 나누어주면 된다. 원 순열 원 모양의 테이블에 n개의 원소를 나열하..