ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C/C++] Next_permutation ์‚ฌ์šฉ๋ฒ•
    C , C++ 2021. 8. 1. 15:47
    ๋ฐ˜์‘ํ˜•
    • ์ด ๊ธ€์€ C++์˜ Next_permutation API ์‚ฌ์šฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

    Next_permutation

    • C++์—์„œ ์ˆœ์—ด๊ณผ ์กฐํ•ฉ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐฑํŠธ๋ž˜ํ‚น(backtraking) ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    • ๋ฐฑํŠธ๋ž˜ํ‚น ๊ธฐ๋ฒ•์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ ์ด์™ธ์—๋„ C++์—์„œ๋Š” ์ˆœ์—ด, ์กฐํ•ฉ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ API์ธ Next_permutation ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

    • ๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ˆœ์—ด, ์กฐํ•ฉ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํ†ต๊ณผํ•  ๋งŒํ•œ ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ ๋‹ค์Œ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค.

    • next_premutation ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” #include< algorithm >์„ ์„ ์–ธํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.


    Example

    int main(){
        int arr[3] = {3,1,2};
        sort(arr, arr+3);
    
        /**
         1 2 3
         1 3 2
         2 1 3
         2 3 1
         3 1 2
         3 2 1
         */
        do{
            for(int i=0;i<3;i++){
                cout<<arr[i]<<' ';
            }
            cout<<endl;
        }while(next_permutation(arr, arr+3));
        cout<<endl;
     }

    ๋‹ค์Œ๊ณผ ๊ฐ™์ด next_premutation์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— arr๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์„ ํ•ด๋‘์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
    next_permutation์—์„œ 3๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” compare ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์„œ ์ •๋ ฌ๋ฐฉ์‹์„ ๋ฐ”๊ฟ”๋„ ๋˜์ง€๋งŒ, Default ๊ฐ’์œผ๋กœ๋Š” ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฐฐ์—ด์ด ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

    int main(){
        int arr2[3] = {1,2,1};
        sort(arr2, arr2+3);
    
        /**
         1 1 2
         1 2 1
         2 1 1
         */
        do{
            for(int i=0;i<3;i++){
                cout<<arr2[i]<<' ';
            }
            cout<<endl;
        }while(next_permutation(arr2, arr2+3));
        cout<<endl;
     }

    ์ค‘๋ณต๋œ ์›์†Œ๊ฐ€ ์žˆ๋”๋ผ๋„ ๋ฌธ์ œ ์—†์ด ์ˆœ์—ด์˜ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

      int main(){
        int arr3[4] = {1,2,3,4};
        int check[4] = {0,1,0,1};
        sort(check, check+4);
    
        /**
         1 2
         1 3
         1 4
         2 3
         2 4
         3 4
         */
        do{
            for(int i=0;i<4;i++){
                if(!check[i]){
                    cout<<arr3[i]<<' ';
                }
            }
            cout<<endl;
        }while(next_permutation(check, check+4));
     }

    ์ˆœ์—ด์ด ์•„๋‹Œ ์กฐํ•ฉ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ์›์†Œ๊ฐ€ ๋“ค์–ด์žˆ๋Š” ์‹œํ€€์Šค๋ฅผ next_permutation์„ ํ•˜๋Š”๊ฒŒ ์•„๋‹Œ 0๊ณผ 1์ด ๋“ค์–ด์žˆ๋Š” check ๋ฐฐ์—ด์„ ๊ฐ€์ง€๊ณ  ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด 4C2 ์ฆ‰, 4๊ฐœ๊ฐ€ ์žˆ๋Š” ์›์†Œ ์ค‘ 2๊ฐœ๋ฅผ ๋ฝ‘์•„์„œ ๋ณด์—ฌ์ฃผ๋Š” ํ•จ์ˆ˜์ผ ๊ฒฝ์šฐ 0์„ 2๊ฐœ , 1์„ 2๊ฐœ๊ฐ€ ๋“ค์–ด์žˆ๋Š” check ๋ฐฐ์—ด์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์‹œํ‚จ ํ›„ 0์ด ์žˆ๋Š” ์ธ๋ฑ์Šค์™€ ๋™์ผํ•œ arr ์›์†Œ๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    ๋ฐ˜์‘ํ˜•

    'C , C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [C/C++] strtok ํ•จ์ˆ˜, ์ฃผ์˜์‚ฌํ•ญ  (0) 2021.08.02
    [C/C++] C++ ์†Œ์ˆ˜์  ์ถœ๋ ฅ  (0) 2021.06.18
Designed by Tistory.