Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

끄적끄적

내가 보려고 적는 순열, 조합, 부분 집합 본문

알고리즘

내가 보려고 적는 순열, 조합, 부분 집합

yenacathy97 2021. 9. 27. 13:39

조합 - 뽑힌 위치을 true로 저장. cnt를 센다

 

static int []visited;
static int R,N;
 void cmbination(int target, int cnt){

     if(cnt == R){
        for(int i=0;i<visited.length;i++){
			if(visited[i]){
      			System.out.print(i+" ");        
            }
        }
      return;
     }    
     
    if(target == N) return;

    visited[target] = true;
    combination(target+1,cnt+1);
    visited[index] = false;
    combination(target+1, cnt);
    
}

 

순열 - 인자로 저장할 위치 index 사용. for문을 써서 visited[i] false를 찾는다. 

void permutation(int index){


	if(index == R) {
    
    	for(int i=0;i<R;i++){
        	System.out.println(arr[i]+" ");
        }
    	return;
    }

	for(int i=0;i<N;i++){
    
    	if(visited[i]) continue;
    	visited[i]=true;
        arr[index]=i;
        permutation(index+1);
        visited[i]=false;
        
    }

}

 

부분 집합 - for문으로 갯수를 지정해주면 combination 진행

static int []visited;
static int R,N;

void subSet(){

	for(int i=0;i<=N;i++){
    	visited = new boolean[i+1];
    	combination(0,0,i);
        
    }

}

 void cmbination(int target, int cnt,int tc){

     if(cnt == tc){
        for(int i=0;i<visited.length;i++){
			if(visited[i]){
      			System.out.print(i+" ");        
            }
        }
      return;
     }    
     
    if(target == N) return;

    visited[target] = true;
    combination(target+1,cnt+1,tc);
    visited[index] = false;
    combination(target+1, cnt,tc);
    
}

'알고리즘' 카테고리의 다른 글

프로그래머스 가장 긴 팰린드롬  (0) 2021.10.10
SWE 암호생성기  (0) 2021.08.06
백준 2493 탑  (0) 2021.08.06
백준 17478 재귀함수가 뭔가요?  (0) 2021.08.06
백준 1244 스위치 켜고끄기  (0) 2021.08.06
Comments