๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’ป Computer Science/- Data Structure, Algorithm

[์•Œ๊ณ ๋ฆฌ์ฆ˜ PS] ๋ฐฑ์ค€ 10972๋ฒˆ ๋‹ค์Œ ์ˆœ์—ด ์ž๋ฐ” ๋ฌธ์ œํ’€์ด

by Wonit 2021. 2. 20.

๋ฌธ์ œ

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ ๋ฐฑ์ค€์˜ 10972๋ฒˆ ๋‹ค์Œ ์ˆœ์—ด ์˜ ์ ‘๊ทผ๊ณผ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•œ ๊ธ€ ์ž…๋‹ˆ๋‹ค.
์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•ด๋ณด์ž.

๋ฌธ์ œ ์ ‘๊ทผ

์ด๋ฒˆ ๋ฌธ์ œ๋Š” ์ˆœ์—ด์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ Next Permutation์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.


STL ์—์„œ๋Š” next_permutation์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์–ด ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ, ์ž๋ฐ”์—์„œ๋Š” ์ด๋ฅผ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

 

๋‹ค์Œ ์ˆœ์—ด์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ 4๊ฐ€์ง€ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค.

 

  1. A[i-1] < A[i] ๋ฅผ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ํฐ i๋ฅผ ์ฐพ๋Š”๋‹ค.
  2. j >= 1 ์ด๋ฉด์„œ A[j] > A[i-1]์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€์žฅ ํฐ j๋ฅผ ์ฐพ๋Š”๋‹ค.
  3. A[i-1] ๊ณผ A[j]๋ฅผ Swap ํ•œ๋‹ค.
  4. 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;
}

์ •๋‹ต ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์‹œ๋ ค๋ฉด solve url ์—์„œ ํ™•์ธ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€