Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 모달에서뒤로가기
- vision-camera
- 재귀함수
- makePermutation
- 2023년 정처기 필기
- Icon
- touchableopacity
- API
- 알고리즘
- algorithm
- 페이지리렌더링
- 뒤로가기구현
- fcm push
- React
- 리액트 네이티브
- fcm 푸시
- 리액트네이티브
- TextInput
- ReactNative
- modal
- 리액트
- 순열
- 가격자릿수
- 모달
- 자동로그인
- react-native
- C++98에러
- Flatlist
- JSON
- asyncstorage
Archives
- Today
- Total
생각은 길게 코딩은 짧게
[Algorithm] 조합 본문
728x90
✔️ '순서' 따위는 없음 , 오로지 몇명을 '다양하게' 뽑을 때 사용 ( 조합 공식 )
✔️ 4개 이상을 뽑을 때 - 재귀함수 사용 / 3개 이하 - 중첨 for문 사용 하는 것이 좋다
💻 (중요!) 조합을 코드로 구현 (재귀함수 사용)
#include<bits/stdc++.h>
using namespace std;
int n=5; int k=3; //5개 중 3개를 뽑는다
int a[5]={1,2,3,4,5}
void printV(vector<int> v){
for(int i : v) cout<<i<<" ";
cout<<"\n";
}
void combi(int start, vector<int> v){
if(v.size()==k)
{
printV(v);
return;
}
for(int i=start+1;i<n;i++){
v.push_back(i);
combi(i,v);
v.pop_back();
}
return;
}
int main(){
vector<int> v;
combi(-1,v);
return 0;
}
>> 0 1 2
0 1 3
0 1 4
0 2 3
0 2 4
0 3 4
1 2 3
1 2 4
1 3 4
2 3 4
i는 index임
vector v의 size가 3이 될 때 출력이 될 수 있도록 하며 pop_back()이 호출하며 원복된다
(코드 도식화)
코드 이해를 위해 도식화를 해보았는데 {0,1,4} 까지는 이해되는데 그 뒤에 {0,2} 부터 이해가 안댐 ㅠ
그래서 그림을 다시 그려보면서 이해 완료
- combi(1, {0, 1})의 for문은 다 돌았으니(i = 4까지) 이제 combi(1, {0, 1})은 종료될 것임
- combi(1, {0, 1}) 이 함수를 호출한 combi(0, {0})의 for문의 i=1인 상황으로 옴
- pop_back( ); 후 vector가 {0} 이 됨.
- 계속 이런 식으로 반복
💻 조합을 코드로 구현 (중첩 for문 사용)
#include<bits/stdc++.h>
using namespace std;
int n=5;
int k=3;
int a[5]={1,2,3,4,5};
int main(){
for(int i=0;i<n;i++){
for(int j=i+1;j<n;j++){
for(int k=j+1;k<n;k++){
cout<<i<<" "<<j<<" "<< k<<"\n";
}
}
}
return 0;
}
>> 0 1 2
0 1 3
0 1 4
0 2 3
0 2 4
0 3 4
1 2 3
1 2 4
1 3 4
2 3 4
'Algorithm' 카테고리의 다른 글
[Algorithm] 재귀함수로 만드는 순열 (0) | 2023.05.09 |
---|---|
[Algorithm] 순열 (next_permutation) (0) | 2023.04.27 |
[Algorithm] 재귀함수 (0) | 2023.04.26 |
[Algorithm] 알고리즘 기본 (1) | 2023.02.20 |