1. 순열(Permutation)의 기본 개념
1.1 순열이란?
- 순열은 n개의 원소 중에서 r개를 선택하여 순서대로 나열하는 것을 말합니다.
수학적 표현
- 기호: nPr 또는 P(n,r)
- 공식: nPr = n!/(n-r)!
- (n-r)!로 나누는 이유는 선택하지 않은 원소들의 순서는 고려하지 않기 때문입니다.
예시로 이해하기
3개의 숫자 [1,2,3]으로 만들 수 있는 모든 순열:
[1,2,3]
[1,3,2]
[2,1,3]
[2,3,1]
[3,1,2]
[3,2,1]
중요 포인트
- 순서가 중요합니다 ([1,2,3]과 [1,3,2]는 다른 순열)
- n개를 모두 사용하는 순열의 개수는 n!개
- 순열은 사전순으로 나열할 수 있습니다
2. Next Permutation 알고리즘
2.1 알고리즘의 원리
왜 Next Permutation이 필요한가?
- 모든 순열을 저장하지 않고도 순서대로 생성할 수 있습니다
- 메모리를 효율적으로 사용할 수 있습니다
- 특정 순열의 '다음' 순열을 O(n) 시간에 찾을 수 있습니다
사전순 배열의 특성
예를 들어 [1,2,3,4]로 만들 수 있는 순열들의 일부를 보겠습니다:
...
[1,4,3,2]
[2,1,3,4] <- 더 큰 순열
[2,1,4,3]
...
중요한 관찰:
- 뒤에서부터 보면, 숫자가 감소하는 부분(내림차순)이 있습니다
- 내림차순이 깨지는 지점이 '교체 포인트'가 됩니다
- 이 지점을 기준으로 다음 순열이 만들어집니다