순열과 조합의 가장 큰 차이는 순서가 있고 없고 이다.
예를 들어 자전거의 번호가 있는 자물쇠를 연다고 가정해보자. 자물쇠 번호가 1234라고 한다면 순서에 대한 고려 없이 4321을 입력하면 자물쇠는 열리지 않는다. 이를 순열이라고 한다. (순서가 있음)
또 다른 예시로 닭가슴살 샐러드를 가정해보자. 닭가슴살 샐러드의 재료는 닭가슴살, 양상추, 소스, 토마토라고 한다면 우리는 샐러드를 담을 때 닭가슴살을 처음으로 넣고 두 번째는 양상추... 이런 식으로 넣지 않고 그냥 재료에 맞게 넣는다. 이를 조합이라고 한다. (순서가 없음)
이제 수학적으로 다가가 보자
1 2 3 4 배열이 있고 2가지 경우를 뽑는다고 가정해보자
순열의 경우에는 순서가 중요하기에 하기와 같이 다 뽑아 버린다.
1 2
1 3
1 4
2 1
2 3
2 4
3 1
3 2
3 4
4 1
4 2
4 3
조합의 경우에는 순서가 중요하지 않기에 하기와 같이 중복되는 것을 빼고 뽑는다.
1 2
1 3
1 4
2 3
2 4
3 4
'CS > 자료구조 & 알고리즘' 카테고리의 다른 글
[C++] STL container 시간 복잡도 및 특징 비교 (0) | 2023.10.10 |
---|---|
[C++] 순열 / 조합 구하기 (next_permutation/prev_permutation 함수) (0) | 2023.10.09 |
카라츠바의 빠른 곱셈 (Karatsuba algorithm) (0) | 2023.10.08 |
[C++] Dynamic Programming (동적계획법) / Top-Down (탑다운)과 Bottom-Up (바텀업) 방식 (0) | 2023.10.06 |
탐욕 / 그리디 알고리즘 (Greedy Algorithm) (0) | 2023.10.06 |