- ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌํ ๋ค, ์ฌ์ ์์ผ๋ก ๋ค์ ์์ด์ ์์ฑํ๋ ๋ฐฉ๋ฒ
์ ์ฐจ
- ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
- ๋ค์์ด ๊ณผ์ ์ ๋ฐ๋ณตํ์ฌ ์์ด ์์ฑ (๊ฐ์ฅ ํฐ ๋ด๋ฆผ์ฐจ์ ์์ด์ ๋ง๋ค ๋๊น์ง ๋ฐ๋ณต)
- ๋ค์ชฝ๋ถํฐ ํ์ํ์ฌ ๊ตํ์์น(๊ผญ๋๊ธฐ ๋ฐ๋ก ์ง์ ) ์ฐพ๊ธฐ (๊ผญ๋๊ธฐ - ๊ฐ์ฅ ํฐ ์)
- ๋ค์ชฝ๋ถํฐ ํ์ํ์ฌ ๊ตํ์์น์(๊ผญ๋๊ธฐ ๋ฐ๋ก ์ง์ ) ๊ตํํ ํฐ ๊ฐ ์์น ์ฐพ๊ธฐ (๊ตํ์์น๋ณด๋ค ํฐ ์ ์ค ๊ฐ์ฅ ๊ฐ๊น์ด ์)
- ๋ ์์น ๊ฐ ๊ตํ
- ๊ผญ๋๊ธฐ๋ถํฐ ๋งจ ๋ค๊น์ง ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
ex. 1 2 3 -> 3 2 1 ๊น์ง ๋ง๋๋ ๊ณผ์
import java.util.Arrays;
public class NextPermutation {
static int R, N, nums[], set[];
public static void main(String[] args) {
// nPn
N = 4;
nums = new int[] { 1, 2, 4, 3, 5};
set = new int[R]; // ์กฐํฉ์ ๋ง๋ค์์ ๋์ ์งํฉ
// 1. ์ค๋ฆ์ฐจ์ ์ ๋ ฌ
Arrays.sort(nums);
do {
System.out.println(Arrays.toString(nums));
}while(nextPermutation());
}
// 2. ๊ผญ๋๊ธฐ๋ฅผ ์ฐพ์์ ์์ด ๋ง๋ค๊ธฐ
private static boolean nextPermutation() {
// 1) ๊ผญ๋๊ธฐ ์ฐพ๊ธฐ
int i = N - 1;
while (i > 0 && nums[i - 1] >= nums[i])
--i;
// i==0์ด๋ฉด, ๋ง๋ค ์ ์๋ ํํ์ ์์ด์ด ๋์ด์ ์๋ค๋ ๋ป (๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์์ด์ ๋ค ๋ง๋ค์๋ค)
if (i == 0)
return false;
// 2) ๊ตํ ์์น์ ๊ตํํ ๊ฐ ์ฐพ๊ธฐ
int j = N - 1;
while (nums[i - 1] >= nums[j])
--j;
// 3) ๊ตํํ ์์น์ ๊ตํํ ์์น๋ณด๋ค ํฐ ๊ฐ ๋ฐ๊พธ๊ธฐ
swap(i - 1, j);
// 4) ๊ผญ๋๊ธฐ๋ถํฐ ๋งจ ๋ค๊น์ง ์ค๋ฆ ์ฐจ์ ์ ๋ ฌ
int k = N - 1;
while (i < k) {
swap(i++, k--);
}
return true;
}
private static void swap(int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
'Algorithm > ์ด๋ก ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Next Permutation์ ์ด์ฉํ ์กฐํฉ (0) | 2022.05.17 |
---|---|
๋นํธ๋ง์คํน์ ์ด์ฉํ ์์ด, ์กฐํฉ (0) | 2022.05.17 |
๋๊ธ