문제 해석
- 이 문제는 전의 POST였던 N과 M (1)의 연장선인 문제이다.
- 자연수 N과 M을 입력받았다면, 중복되는 수열을 출력하지 않고 오름차순으로 출력하면 된다. (1 3 과 3 1은 같은 수열이니 오름차순으로 정렬했을때 1 3이 먼저 출력되므로 1 3만 출력하면 된다.)
코드
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int N;
static int M;
static int[] list;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
list = new int[M];
backTracking(1,0);
br.close();
System.out.println(sb);
}
static void backTracking(int start, int row) {
if (row == M) {
for(int value : list){
sb.append(value + " ");
}
sb.append("\n");
return;
}
for (int i = start; i <= N; i++) {
list[row] = i;
backTracking(i+1,row+1);
}
}
}
결과
느낀 점
- 생각보다 간단한 문제였는데 꽤 헤맸다. 코드 자체는 시작점만 바꿔주면 되는 문제였다... (근데 왜 헤맸지...😭)