백준 15650번 : N과 M(2)

n과 m 1번 문제와 보기에는 비슷하지만, 조건이 몇개 붙는다. 조건은 사전순으로 출력해야 하며 중복되는 배열은 배제한다. 즉 1 2 3이나 

2 3 1 이나 3 2 1은 서로 같으니 1 2 3만 출력해야 한다. 처음에는 1번 문제를 풀었던 방식처럼 사용했는지 안했는지를 표시하는 boolean배열을 만들어서 풀어보려고 했으나, 그럴경우 조건이 복잡해져서 좀 더 단순하게 풀었다. 단순하게 생각해 보면 한 행에서 맨 앞에 있는 수보다 항상 크고 사전적으로 수열이 만들어야 되지므로 반복문을 이용해서 풀이했다.

import java.util.Scanner;

public class Main {
    static int[] arr;

    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        int m=scanner.nextInt();
        arr=new int[m];
        dfs(1,0,n);
    }
    public static void dfs(int start,int deep,int n){
        if(deep== arr.length){
            for(int item: arr)
                System.out.print(item+" ");
            System.out.println();
            return;
        }

        for(int i=start;i<=n;i++){
            arr[deep]=i;
            dfs(i+1,deep+1,n);
        }
    }
}

 

'Algorithm > 백준' 카테고리의 다른 글

백준 1978번: 소수찾기(Swift)  (0) 2021.08.16
백준 20809번: 알파벳 찾기(Swift)  (0) 2021.07.09
백준 15649번 : N과 M(1)  (0) 2021.05.14
백준 18870번: 좌표 압축  (0) 2021.05.12
백준 1181번: 단어정렬(Java)  (0) 2021.05.08