문제
https://www.acmicpc.net/problem/10972
풀이과정
1부터 N까지의 수로 이루어진 순열이 주어지면 사전순으로 다음에 오는 순열을 구하는 문제이다. 이러한 문제들을 보면 항상 내 머리로는 셀 수 있는데 코딩을 할 수가 없어서 자괴감이 들었던 것 같다.
찾아보니 C++ 에 정말 편리한 함수가 존재했다.
next_permutation(v.begin(),v.end()) 는 v라는 벡터의 처음과 끝을 주면 다음 순열이 존재할 경우 true를 리턴하고 벡터의 원소들을 다음 순열로 만들어준다.
꼭 벡터가 아니여도 배열의 처음과 끝을 줘도 된다.
이러한 함수를 내가 구현해봐야 좋겠지만 일단은 사용법만 알아두고 응용하는 법만 알아둬야겠다.
반대로 prev_permutation도 있다.
소스코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX_N 10000
int arr[MAX_N];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int N;
cin >> N;
for (int i = 0; i < N; i++) cin >> arr[i];
if (next_permutation(arr, arr + N))
{
for (int i = 0; i < N; i++) cout << arr[i] << " ";
}
else cout << "-1\n";
return 0;
}