๋ฌธ์
ํด๋น ํฌ์คํ ์ ๋ฐฑ์ค์ 10972๋ฒ ๋ค์ ์์ด ์ ์ ๊ทผ๊ณผ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ค๋ช ํ ๊ธ ์ ๋๋ค.
์ ๋ต ์์ค ์ฝ๋๋ฅผ ํ์ธํ์๋ ค๋ฉด solve url ์์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด๋ค ๋ฐฉ์์ผ๋ก ์ ๊ทผํด์ผ ํ๋์ง๋ฅผ ๋จผ์ ์๊ฐํด๋ณด์.
๋ฌธ์ ์ ๊ทผ
์ด๋ฒ ๋ฌธ์ ๋ ์์ด์ ๊ตฌํ๊ธฐ ์ํ Next Permutation์ ๊ตฌํํ๋ ๋ฌธ์ ์ด๋ค.
STL ์์๋ next_permutation์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋์ด ๊ทธ๋๋ก ์ฌ์ฉํ๋ฉด ๋์ง๋ง, ์๋ฐ์์๋ ์ด๋ฅผ ์ง์ ๊ตฌํํด์ค์ผ ํ๋ค.
๋ค์ ์์ด์ ๊ตฌํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์๋ ๋ค์ 4๊ฐ์ง ์์๋ฅผ ๋ฐ๋ผ์ผ ํ๋ค.
A[i-1] < A[i]
๋ฅผ ๋ง์กฑํ๋ ๊ฐ์ฅ ํฐ i๋ฅผ ์ฐพ๋๋ค.j >= 1
์ด๋ฉด์A[j] > A[i-1]
์ ๋ง์กฑํ๋ ๊ฐ์ฅ ํฐ j๋ฅผ ์ฐพ๋๋ค.A[i-1]
๊ณผA[j]
๋ฅผ Swap ํ๋ค.A[i]
๋ถํฐ ์์ด์ ๋ค์ง๋๋ค.
์์ ๊ณผ์ ์ ํ ๋ฒ ์ํํ๋ฉด ํ์ฌ ์์ด์์ ๋ฐ๋ก ๋ค์ ์์ด์ ์ฐพ์ ์ ์๋ค.
์ด ๊ณผ์ ์ ๋ ์ด์ ์ํํ ์ ์์ ๋งํผ ๋ฐ๋ณตํ๋ค๋ฉด ๋ชจ๋ ์์ด์ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด ๋๋ค.
์ ๋ต ์ฝ๋
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 index1, int index2) {
int temp = arr[index1];
arr[index1] = arr[index2];
arr[index2] = temp;
}
๋๊ธ