

우선 이 문제는 제목에서도 알 수 있다싶이 이전 문제와 흡사하다.
다만 수열을 배열에 담을 때, 오름차순으로 점차 증가하게끔 넣어야 하기에 해당 제어문을 고려해주었다.
package test11;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Ox11_Q4_2 {
static StringBuilder sb;
static int n,m;
static int cnt;
static boolean [] issued ;
static int [ ] put;
// 백준 15650 S3 ( N과 M(2) )
public static void main(String args []) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
sb = new StringBuilder();
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
issued = new boolean[n+1];
put = new int[m+1];
br.close();
checkN(0,1);
System.out.println(sb.toString());
}
public static void checkN(int cur, int start) {
// 현재 값(cur)과 원하는 개수(m)가 같으면 출력
if (cur == m) {
for (int i = 0; i < m; i++) {
sb.append(put[i] + " ");
}
sb.append("\n");
return;
} // if fin
// i가 start부터 시작하므로, 이후에 추가될 값은 오름차순임.
for (int i = start; i <= n; i++) {
if (!issued[i]) {
put[cur] = i;
issued[i] = true;
// 재귀해서 체크
checkN(cur + 1, i+1);
// 초기화
issued[i] = false;
}// if fin
} // for fin
}// checkN fin
}
전체적으로 checkN 함수는 이전과 흡사하지만, 이번엔 증가하는 값들을 체크하기 위해
start라는 인자를 추가적으로 받아주었다.
그리고, 이전엔 반복하여 재귀문을 시행할 때, i = 0부터 시작했으나, 이번엔 i = start 부터 시작하였고,
바로 issued로 값의 여부를 체크해주므로 원하던 증가하는 값들만 구할 수 있었다.
마찬가지로 한 사이클을 돌리고 나선 isuued[i]를 초기화 시켜주면서 정상적으로 해결하였다.

굿