-
[10973] 이전 순열BOJ 2021. 10. 14. 06:02
https://www.acmicpc.net/problem/10973
10973번: 이전 순열
첫째 줄에 입력으로 주어진 순열의 이전에 오는 순열을 출력한다. 만약, 사전순으로 가장 처음에 오는 순열인 경우에는 -1을 출력한다.
www.acmicpc.net
<문제>
아래 코드는 직접 구현했지만... 애초에 c++은 next_permutaion()과 prev_permutation()을 지원한다.
stl을 사용하는 게 훨씬 더 안전하고 실수할 일도 적으니, 그쪽을 사용하는 게 나을 듯싶다.
<소스코드>
123456789101112131415161718192021222324252627282930313233343536373839#include <stdio.h>int n, a[10001];void swap(int y, int x) {int temp;temp = a[y];a[y] = a[x];a[x] = temp;return;}void f() {int i, j;for (i = n - 1; i >= 1 && a[i - 1] < a[i]; i--);for (j = n - 1; j >= 0 && a[i - 1] < a[j]; j--);swap(i - 1, j);j = n - 1;while (i < j) {swap(i, j);i++, j--;}return;}int main(void) {int i;bool isFirst = true;scanf("%d", &n);for (i = 0; i < n; i++) {scanf("%d", &a[i]);if (a[i] != i + 1) isFirst = false;}if (isFirst) {printf("-1");return 0;}f();for (i = 0; i < n; i++) printf("%d ", a[i]);return 0;}cs 'BOJ' 카테고리의 다른 글
[2573] 빙산 (0) 2021.10.14 [1325] 효율적인 해킹 (0) 2021.10.14 [16234] 인구 이동 (0) 2021.10.14 [2517] 달리기 (0) 2021.10.14 [3055] 탈출 (0) 2021.10.13