🎈 순열
임의의 수열을 다른 순서로 섞는 연산 A=[1,5] 인 경우 [1,5],[5,1] 이 순열이다.
c++의 algorithm 헤더에는 next_permutation과 prev_permutation이 있어서 문제를 쉽게 풀 수 있었다.
🎗 Permutation 사용법
반환형 : <bool> 타입. 다음 (혹은 이전) 순열을 찾는데 성공하면 <true return>, 실패하면 <false return> 사용법 : <bool check = next_permutation (순열의 시작 위치, 순열의 끝 위치)>
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int arr[10001];
bool check;
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i];
check = next_permutation(arr, arr + n);
if (check == false)
{
cout << -1 << endl;
return 0;
}
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;
int n;
int arr[10001];
bool check;
int main()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i];
check = prev_permutation(arr, arr + n);
if (check == false)
{
cout << -1 << endl;
return 0;
}
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
return 0;
}
앞에서 익힌 next_permutation()
을 사용해서 반복문을 돌리면 해결할 수 있다.
#include <iostream>
#include <algorithm>
using namespace std;
int n;
bool check;
int arr[9];
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
arr[i - 1] = i;
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
cout << '\n';
while (next_permutation(arr, arr + n))
{
for (int i = 0; i < n; i++)
{
cout << arr[i] << " ";
}
cout << '\n';
}
return 0;
}