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 |