반복문으로 next_permutation 메서드를 이용해서 가능한 순열의 갯수를 구할 수 있다
next_permutation메서드 안에 시작점, 끝점을 넣어주고 do - while 문으로 돌면 해당 배열 안의 원소들이
가능한 경우의 수 만큼 배치된다
! 그냥 while 문의 경우 마지막 순열을 계산한 후 더 이상 계산할 순열이 없으므로 순열내 원소를 출력하지 않고
반복문이 종료되버린다 , do-while 문을 사용
! 오름차순을 기준으로 순열을 만들기때문에 정렬된 상태로 메서드를 호출해야한다
int main() {
int a[] = {1,2,3};
do{
for (int i : a) {
cout << i << " ";
}
cout << '\n';
}while(next_permutation(&a[0], &a[0] + sizeof(a)/sizeof(int)));
return 0;
}
-- 재귀를 이용한 방식
using namespace std;
int a[3] = {1, 2, 3};
int n = 3, r = 3;
void print()
{
for (int i = 0; i < r; i++)
{
cout << a[i] << " ";
}
cout << "\n";
}
void makePermutation(int n, int r, int depth)
{
if (r == depth)
{
print();
return;
}
for (int i = depth; i < n; i++)
{
swap(a[i], a[depth]);
makePermutation(n, r, depth + 1);
swap(a[i], a[depth]);
}
return;
}
int main()
{
makePermutation(n, r, 0);
return 0;
}
'C++ 알고리즘 > 풀다가 알게된 것' 카테고리의 다른 글
소수점 n 자리에서 반올림, 올림 , 내림 (D2 1984. 중간 평균값 구하기 ) (0) | 2024.10.12 |
---|---|
우선순위큐 (1) | 2024.10.01 |
split 메서드 구현하기 (1) | 2024.08.27 |
조합 구하기 (0) | 2024.08.27 |
c++ 코딩테스트 풀면서 알게 된 것들 기록 (0) | 2024.07.31 |