코테공부

순열 조합

하얀잔디 2022. 8. 30. 18:11

맨날 헷갈리는거.. 정리좀 해놓자.

 

순열 ->

1. visit 필요

2. for문은 0부터 시작

3. for문 안에 재귀를 부를때 인자는 인자로 들어온 cnt+1 로 돈다.

 

조합 

1.visit 필요없음

2. for문 안에는 cnt로부터 시작

3. for문 안에 재귀를 부를 때는 for문 인덱스인 i + 1로 돈다!!

 

 

순열 : 인자 : 3개 + visit 배열

void permutation(string origin,string str,int depth){

    if(str.size()==depth){
        cout<< str <<" \n";
        int big =stoi(str);
        return;
    }
    for(int i=0;i<origin.size();i++){
        if(visit[i]) continue;
        visit[i]=true;
        string newst = str+origin[i];
        permutation(origin,newst,depth);
        visit[i]=false;
    }
}

string solution(string number, int k) {
    permutation(number,"",k);
    return "good";
}

 

핵심로직 : 

 

for(int i=0;i<origin.size();i++){
    if(visit[i]) continue;
    visit[i]=true;
    string newst = str+origin[i];
    permutation(origin,newst,depth);
    visit[i]=false;
}

for 문 : 0 부터 기존 size까지 . visit 쓰기.

 

 

--- 조합 :

 

필요 인자 : 4개

기존, 담길거, 인덱스용, depth용

 

void johab(string origin,string str,int idx,int depth){
    if(str.size()==depth){
        cout<< str <<" \n";
        return;
    }
    for(int i=idx;i<origin.size();i++){
        string newst = str+origin[i];
        johab(origin,newst,i+1,depth);
    }
}

주의점 :

 

밑에 for 문의 i = idx,

johab의 인자로도 i 를 넣는다!!

 

 

'코테공부' 카테고리의 다른 글

다익스트라 알고리즘  (0) 2022.11.04
난쟁이마을 c++  (0) 2022.09.20
stringstream  (1) 2022.09.19
erase, substr..  (0) 2022.09.02
프로그래머스 입국심사 c++  (0) 2022.09.01