๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 10974๋ฒ ๋ชจ๋ ์์ด ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
๋ฌธ์ ์ ๊ทผ
์ง๋ ๋ฌธ์ ๋ฅผ ํตํด์ ์ฐ๋ฆฌ๋ nextPermutation()
๋ฉ์๋๋ฅผ ๊ตฌํํ๋ฉด์ ๋ค์ ์์ด์ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ ๋ค.
์ด๋ฒ์๋ ๋ค์ ์์ด์ ๊ตฌํ ์ ์๋ ์ต๋๊น์ง ๊ตฌํ๋ ๋ชจ๋ ์์ด๋ฌธ์ ๋ฅผ ํ์ด๋ณผ ๊ฒ์ด๋ค.
์ด๋ฒ ๋ฌธ์ ๋ ์์ด์ ๋ํ ํต์ฌ ์ปจ์
์ ๋ํด ์๊ณ ์๋์ง๋ฅผ ๋ฌผ์ด๋ณด๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ nextPermutation()
๋ง ๊ตฌํํ ์ ์์ผ๋ฉด ์ฝ๊ฒ ํด๊ฒฐํ ์ ์๋ ๊ทธ๋ฐ ๊ฐ๋จํ ๋ฌธ์ ์ด๋ค.
ํด๊ฒฐ๋ฒ
๋ค์ ์์ด์ ๊ตฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์๋ ๋ค์ 4๊ฐ์ง ์์๋ฅผ ๋ฐ๋ผ์ผ ํ๋ค.
A[i-1] < A[i]
๋ฅผ ๋ง์กฑํ๋ ๊ฐ์ฅ ํฐ i๋ฅผ ์ฐพ๋๋ค.j >= 1
์ด๋ฉด์A[j] > A[i-1]
์ ๋ง์กฑํ๋ ๊ฐ์ฅ ํฐ j๋ฅผ ์ฐพ๋๋ค.A[i-1]
๊ณผA[j]
๋ฅผ Swap ํ๋ค.A[i]
๋ถํฐ ์์ด์ ๋ค์ง๋๋ค.
์ ๋ต ์ฝ๋
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int n = input.nextInt();
int[] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = i + 1;
}
do {
for(int value : arr) {
System.out.print(value + " ");
}
System.out.println();
}while(nextPermutation(arr));
}
private static boolean nextPermutation(int[] arr) {
int i = arr.length - 1;
while(i > 0 && arr[i-1] >= arr[i]) i--;
if(i <= 0) return false;
int j = arr.length - 1;
while(arr[j] <= arr[i-1]) j--;
swap(arr, i-1, j);
j = arr.length - 1;
while(i < j) {
swap(arr, i, j);
i++; j--;
}
return true
}
private static void swap(int[] arr, int idx1, int idx2) {
int temp = arr[idx1];
arr[idx1] = arr[idx2];
arr[idx2] = temp;
}
}
๋๊ธ