1. 다음 순열
public static int[] a = new int[n];
public static int i;
public static void nextPerm() {
i = -1;
for(int k=0; k<n-1; k++) {
if(a[k]<a[k+1]) { i = k+1; }
}
if(i==-1) { return; }
int j = i;
for(int k=i; k<n; k++) {
if(a[i-1]<a[k]) { j = k; }
}
swap(i-1, j);
for(int k=0; k<(n-i)/2; k++) { swap(i+k, n-1-k); }
}
public static void swap(int n1, int n2) {
int temp = a[n1];
a[n1] = a[n2];
a[n2] = temp;
}
2. 이전 순열
public static int[] a = new int[n];
public static int i;
public static void prevPerm() {
i = -1;
for(int k=0; k<n-1; k++) {
if(a[k]>a[k+1]) { i = k+1; }
}
if(i==-1) { return; }
int j = i;
for(int k=i; k<n; k++) {
if(a[i-1]>a[k]) { j = k; }
}
swap(i-1, j);
for(int k=0; k<(n-i)/2; k++) { swap(i+k, n-1-k); }
}
public static void swap(int n1, int n2) {
int temp = a[n1];
a[n1] = a[n2];
a[n2] = temp;
}
참고
- 『알고리즘 기초 2/2』
'Algorithm & Data Structure' 카테고리의 다른 글
Bitmask (0) | 2022.03.04 |
---|---|
Prime Number (0) | 2022.03.04 |
Greatest Common Divisor, Least Common Multiple (0) | 2022.03.04 |
Dynamic Programming (0) | 2022.01.05 |
Stack, Queue, Deque (0) | 2021.12.01 |