BOJ 10972: 다음 순열

https://www.acmicpc.net/problem/10972

  • 2월동안 187문제 풀기(지난달 누적 87개) (20/187)
  • 풀때마다 헷갈리는 next_permutation.
  • 정렬을 안 써도 가능한데.. 그냥 쓰고 풀었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <bits/stdc++.h>
using namespace std;

int N, arr[10001];

int main() {
  ios::sync_with_stdio(false);
  cin >> N;
  for(int i = 0; i < N; i++) cin >> arr[i];
  int p = N-1;
  while(p >= 1 && arr[p-1] > arr[p]) p--;
  if(!p) {
    cout << -1;
    return 0;
  }

  sort(arr+p, arr+N);
  int* it = upper_bound(arr+p, arr+N-1, arr[p-1]);
  swap(arr[p-1], *it);
  sort(arr+p, arr+N);
  for(int i = 0; i < N; i++) cout << arr[i] << " ";
  cout << endl;
}