문제

while문으로 다음 순열을 계속 구해주면 된다.

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

vector<int> v;
int N;

bool go() {
	int i, j;

	i = N - 1;
	while (i && v[i - 1] >= v[i]) i--;
	if (i <= 0) return false;

	j = N - 1;
	while (v[j] <= v[i - 1]) j--;

	swap(v[i - 1], v[j]);

	j = N - 1;
	while (i < j) {
		swap(v[i], v[j]);
		i++;
		j--;
	}
	return true;
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int i;
	cin >> N;

	for (i = 1; i <= N; i++) {
		v.push_back(i);
		cout << i << " ";
	}
	cout << "\n";

	while (go()) {
		for (i = 0; i < N; i++) cout << v[i] << " ";
		cout << "\n";
	}
	return 0;
}