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

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

by Wonit 2021. 2. 20.

๋ฌธ์ œ

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

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

๋ฌธ์ œ ์ ‘๊ทผ

์ง€๋‚œ ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด์„œ ์šฐ๋ฆฌ๋Š” nextPermutation() ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด์„œ ๋‹ค์Œ ์ˆœ์—ด์„ ๊ตฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ๋‹ค.

 

์ด๋ฒˆ์—๋Š” ๋‹ค์Œ ์ˆœ์—ด์„ ๊ตฌํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€๊นŒ์ง€ ๊ตฌํ•˜๋Š” ๋ชจ๋“  ์ˆ˜์—ด๋ฌธ์ œ๋ฅผ ํ’€์–ด๋ณผ ๊ฒƒ์ด๋‹ค.

 

์ด๋ฒˆ ๋ฌธ์ œ๋„ ์ˆœ์—ด์— ๋Œ€ํ•œ ํ•ต์‹ฌ ์ปจ์…‰์— ๋Œ€ํ•ด ์•Œ๊ณ  ์žˆ๋Š”์ง€๋ฅผ ๋ฌผ์–ด๋ณด๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— nextPermutation() ๋งŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๊ทธ๋Ÿฐ ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ์ด๋‹ค.

 

ํ•ด๊ฒฐ๋ฒ•

๋‹ค์Œ ์ˆœ์—ด์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์—๋Š” ๋‹ค์Œ 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] ๋ถ€ํ„ฐ ์ˆœ์—ด์„ ๋’ค์ง‘๋Š”๋‹ค.

์ •๋‹ต ์ฝ”๋“œ

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;
    }
}

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

๋Œ“๊ธ€