Coding Test/알고리즘 이론

순열(permutaion) 과 조합(combination)

hyunkookim 2025. 4. 16. 02:57

**순열(permutation)**과 **조합(combination)**은 모두 "선택"과 관련된 개념이지만, 순서를 따지느냐에 따라 완전히 달라져요.


✅ 순열 (Permutation)

📌 정의:

순열은 순서가 중요한 선택
즉, 어떤 항목들을 어떤 순서로 배열하느냐가 중요해요.

📌 예시:

숫자 [1, 2, 3]에서 3개를 뽑아 순열을 만들면:

[1, 2, 3] [1, 3, 2] [2, 1, 3] [2, 3, 1] [3, 1, 2] [3, 2, 1]

👉 총 6개 (3! = 6)


✅ 조합 (Combination)

📌 정의:

조합은 순서를 따지지 않는 선택
즉, 뭐를 뽑았는지가 중요하지, 어떤 순서로 뽑았는지는 중요하지 않아요.

📌 예시:

숫자 [1, 2, 3]에서 3개를 뽑아 조합을 만들면:

[1, 2, 3]

👉 [1, 2, 3], [3, 2, 1], [2, 1, 3] 다 같은 조합!
👉 총 1개 (3C3 = 1)


🧠 핵심 차이 요약

항목 순열 (Permutation) 조합 (Combination)
순서 중요함 ✅ 중요하지 않음 ❌
예시 [1,2,3], [3,2,1]은 다름 [1,2,3], [3,2,1]은 같음
공식 nPr = n! / (n-r)! nCr = n! / (r! (n-r)!)

🔧 Python 예시 (3개 중 2개 선택)

from itertools import permutations, combinations

nums = [1, 2, 3]

# 순열 (순서 O)
print(list(permutations(nums, 2)))  
# → [(1, 2), (1, 3), (2, 1), (2, 3), (3, 1), (3, 2)]

# 조합 (순서 X)
print(list(combinations(nums, 2)))  
# → [(1, 2), (1, 3), (2, 3)]