๐Ÿ’œ๊ฐœ๋ฐœ๊ณผ ์ผ์ƒ (โ‰ง∇โ‰ฆ)๏พ‰

[C++] ์ˆœ์—ด ์กฐํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ํ•˜๊ธฐ ๋ณธ๋ฌธ

CS/C++

[C++] ์ˆœ์—ด ์กฐํ•ฉ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ตฌํ˜„ํ•˜๊ธฐ

๊ฐ•์˜์„œ 2023. 3. 2. 13:59

ํ•ญ์ƒ ๊ถ๊ธˆํ•˜๋ฉด์„œ ์ •๋ฆฌํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ ๊ฐ™์•„์„œ, ์ •๋ฆฌํ•˜๊ณ  ๋“ค์–ด๊ฐ€๊ธฐ.

 

C++์—์„œ๋Š” n๊ฐœ ์ค‘ k๊ฐœ๋ฅผ ๋ฝ‘๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ next_permutation ์ด ์žˆ๋‹ค.

์ด๋ฅผ ํ™œ์šฉํ•ด์„œ ์ˆœ์—ด ์กฐํ•ฉ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ, ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ˆœ์—ด ๋ฐ ์กฐํ•ฉ์„ ๊ตฌํ•˜๊ธฐ ์ „์— sort ํ•จ์ˆ˜๋กœ ๋ฐฐ์—ด์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ์ด ํ•„์š”ํ•˜๋‹ค.

 

1) ์ˆœ์—ด

N๊ฐœ๋ฅผ ๋‚˜์—ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•œ๋‹ค.

#include <algorithm>

sort(v.begin(),v.end());

do {
        for(int i = 0; i < v.size(); i++){
           cout << v[i] << " ";
		}
		cout << "\n";

    }while(next_permutation(v.begin(), v.end()));

next_permutation์€ algorithm ํ—ค๋”์—์„œ ํ•ด๋‹น ๊ฐ’์„ ํ™œ์šฉํ•œ๋‹ค.

 

 

 

2) ์กฐํ•ฉ

N๊ฐœ ์ค‘ k๊ฐœ๋ฅผ ๋ฝ‘์„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.


    
    // 0, 1์„ ๋„ฃ์–ด ์ž„์‹œ ์กฐํ•ฉ ์ƒ์„ฑ
    vector<int> tempVector;
    
    // ์„ ํƒ ๊ฐœ์ˆ˜
    int n = 3;
 
    // ์ž„์‹œ ๋ฒกํ„ฐ๋ฅผ ์ถ”๊ฐ€
    // ๊ณ ๋ฅผ ๊ฒฝ์šฐ n๊ฐœ์˜ 1์„ ์ถ”๊ฐ€
    for (int i = 0; i < n; i++)
        tempVector.push_back(1);
    //๋‚˜๋จธ์ง€๋Š” ๋‹ค 0์œผ๋กœ ์ดˆ๊ธฐํ™”
    for (int i = 0; i < dungeons.size() - n; i++)
        tempVector.push_back(0);
        
    //ํ•ด๋‹น ๊ฐ’์„ sortํ•˜๊ธฐ
    sort(tempVector.begin(), tempVector.end());
    
    
    do{
    
        for (int i = 0; i < tempVector.size(); i++)
        {
            if (tempVector[i] == 1)
            { // ์‹ค์ œ๊ฐ’ ์ถœ๋ ฅ
                cout << dungeons[i][0] << " " << dungeons[i][1] << "\n";
            }
        }
 
        cout << endl;
        
    }while(next_permutation(tempVector.begin(),tempVector.end()));