본문 바로가기

코딩 및 기타/코딩 테스트 준비

[필수 개념] 순열 / 조합

728x90

∙ 순열

- 순서와 상관 O 뽑는다면 -> 순열

ex) 문제에서 순서를 재배치하여....~한 순서의 경우 max 값

// 순열

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    int a[] = {1, 2, 3};
    sort(a,a+3);
    
    do{
        for(int i : a)
            cout << i << " ";
        cout << '\n';
    }while(next_permutation(&a[0],&a[0] + 3)); // next_permutation : 오름차순기반으로 순열 만듬
    
    
    // 백터를 사용했을 때
    vector<int> b = {1, 2, 3};
    sort(b.begin(), b.end());
    do{
        for(int i = 0; i < 2; i++)  // 두개를 뽑아 순열 만듬
            cout << b[i] << " ";
        cout << '\n';
    }while(next_permutation(b.begin(), b.end()));
}

 

∙ 재귀함수로 만드는 순열

// 재귀함수로 만드는 순열

#include <iostream>
#include <vector>

using namespace std;
vector<int> v;

void printV(vector<int> &v)
{
    for (int i = 0; i < v.size(); i++){
        cout << v[i] << " ";
    }
    cout << "\n";
}

void makePermutation(int n, int r, int depth){
    cout << n << " : " << r << " : " << depth << '\n';
    if (r == depth){
        printV(v);
        return;
    }
    for (int i = depth; i < n; i++){
        swap(v[i], v[depth]);
        makePermutation(n, r, depth + 1);
        swap(v[i], v[depth]);
    }
}


int main()
{
    for(int i = 1; i <= 3; i++){
        v.push_back(i);
    }
    makePermutation(3,3,0);
}

 

∙ 조합

- 순서와 상관 X 뽑는다면 -> 조합

ex) 순서 상관없이 "다양하게" 몇명을 뽑을 때

// 재귀함수로 만드는 조합 (4개이상은 재귀함수가 좋음, 3개 이하는 중첩 반복문)

#include <iostream>
#include <vector>

using namespace std;

int n = 5, k = 3, a[5] = {1, 2, 3, 4, 5};

void printV(vector<int> b){
    for (int i : b)
        cout << i << " ";
    cout << '\n';
}

// 외우셈,,,,
void combi(int start, vector<int> b){
    if (b.size() == k){
        printV(b);
        return;
    }
    for (int i = start + 1; i < n; i++){
        b.push_back(i); // index 기반으로 뽑는게 좋음
        combi(i, b);
        b.pop_back(); // 원복
    }
}

int main()
{
    vector<int> b;
    combi(-1, b);
}

 

'코딩 및 기타 > 코딩 테스트 준비' 카테고리의 다른 글

2주차(개념)  (0) 2023.11.09
1주차 (개념)  (0) 2023.10.27
[필수 개념] 중복된 요소 제거 방법 과 unique()  (0) 2023.10.26
[필수 개념] Split  (0) 2023.10.23
[필수 개념] 재귀함수  (0) 2023.10.23