less than 1 minute read

문제 풀이 방식

  • 재귀 함수 사용할때 전위/후위 연산자 사용에 유의하자.
  • 중복을 허용하지 않는 조합을 구할 수 있다.
  • DFS

문제 풀이 (Java)

import java.io.BufferedReader;  
import java.io.InputStreamReader;  
import java.util.StringTokenizer;  
  
public class boj15650 {  
    static int N, M;  
    static int[] foo;  
    public static void main(String[] args) throws Exception {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
        StringTokenizer st = new StringTokenizer(br.readLine());  
  
        N = Integer.parseInt(st.nextToken());  
        M = Integer.parseInt(st.nextToken());  
  
        foo = new int[M];  
//        visit = new boolean[N];  
  
        DFS(1, 0);  
    }  
  
    public static void DFS(int idx, int depth){  
        if (depth == M){  
            // 탐색 종료 조건 : 길이가 M            printArray(foo);  
            return;  
        }  
  
        // 재귀 호출을 통한 DFS 구현  
        for(int i = idx; i <= N; i++){  
            foo[depth] = i; // depth 에 잇는 값 i로 바꿔줌  
            DFS(i + 1, depth + 1);  
        }  
  
    }  
  
    public static void printArray(int[] array){  
  
        for(int i = 0; i < array.length ; i++){  
            System.out.print(array[i] + " ");  
        }  
        System.out.println();  
    }  
  
}

Leave a comment