728x90
반응형
안녕하세요 놀이방 사장입니다.
이번 포스팅은 백준 15650
"N과 M(2)" 문제입니다.
15650번: N과 M (2)
한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해
www.acmicpc.net
이 포스팅을 보시기 전에 16549번 N과M(1) 포스팅을 보고 오시면 좋을 거 같습니다.
그 코드에서 예외처리만 조금해주면 풀리는 문제이기 떄문입니다.
출력을 보면 아시겠지만
뒤에 출력되는 숫자들이 앞에 숫자보다 커져야합니다.
N과M(1) 코드에서 저 예외처리만 해주면 됩니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main{
public static int[] arr;
public static boolean[] check;
public static StringBuilder sb = new StringBuilder();
public static void dfs(int n, int m, int depth){
if(depth == m){
for(int i : arr){
sb.append(i).append(' ');
}
sb.append('\n');
return;
}
for(int i=0; i<n; i++){
if(!check[i]){
if(depth > 0){
if(arr[depth-1] <= i){
check[i] = true;
arr[depth] = i+1;
dfs(n,m,depth+1);
check[i] = false;
}
}else{
check[i] = true;
arr[depth] = i+1;
dfs(n,m,depth+1);
check[i] = false;
}
}
}
}
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
arr = new int[m];
check = new boolean[n];
dfs(n,m,0);
System.out.println(sb);
}
}
먼저 첫번쨰 숫자일 떄는 그대로 로직을 태우고 그 뒤로는 앞에 숫자보다 값이 클 떄만 로직을 태워주면 됩니다.
그러면 정답처리되는 문제입니다.
앞에 N과M(1)를 이해하셨으면 풀 수 있는 문제입니다.
반응형
'알고리즘 > 백준' 카테고리의 다른 글
[백준 10815] - 숫자 카드 - JAVA(HashMap사용) (0) | 2024.03.10 |
---|---|
[백준 9461] 파도반 수열 - JAVA [DP] (1) | 2024.01.30 |
[백준 2579] - 계단오르기 - JAVA [DP] (0) | 2024.01.29 |
[백준 11726] 2*n 타일링 - JAVA [DP] (0) | 2024.01.29 |
[백준 1003] 피보나치 함수 - JAVA - [DP] (1) | 2024.01.28 |