[ 알고리즘 ]
1. 배열 P에서 P[X] < P[X+1]을 만족하는 가장 큰 인덱스 값 X 구하기
( 만약 X가 없다면 탐색 종료 )
2. 배열에서 P[X] < P[Y]를 만족하는 가장 큰 인덱스 값 Y 구하기
3. P[X]와 P[Y]의 값 교환하기
4. P[X+1] ~ P[N]까지의 값 뒤집기
[ 소스코드 ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
boolean nextOrder() {
int x, y;
// 1. Find largest x such that P[x]<P[x+1]
x = -1;
for(int i=0;i<sz-1;i++) {
if(num[i] < num[i+1]) x = i;
}
if(x == -1) return false;
else {
// 2. Find largest y such that P[x]<P[y]
y = 0;
for(int j=0;j<sz;j++) {
if(num[x] < num[j]) y = j;
}
// 3. Swap P[x] and P[y]
SWAP(num, x, y);
// 4. Reverse P[x+1:n]
int l, r;
l = x+1; r = sz-1;
while(l<r) {
SWAP(num, l, r);
l++; r--;
}
return true;
}
}
|
cs |
참고
https://www.youtube.com/watch?v=goUlyp4rwiU&ab_channel=TheCodingTrain
'Study' 카테고리의 다른 글
모듈로 곱셈 역원_팩토리얼 계산( BOJ 13977 ) (0) | 2022.07.11 |
---|---|
정렬 시간 비교 (0) | 2022.04.09 |
소수 판별법(밀러-라빈 소수판별법) (0) | 2022.02.09 |
Manacher's Algorithm (0) | 2021.05.27 |
Fenwick Tree( BIT ) (0) | 2021.03.16 |