-
[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