문제 해석
- 문제는 N과 M(2)에선 중복을 제거했더라면, N과 M(3)에서는 수열의 숫자들이 중복이 허용된 상태에서 NXN개의 경우의 수가 나오면 되는 문제이다.
- N이 4고 M이 2라고 가정했을 때, 기존에는 1 1가 안되었다면 이 문제는 1 1, 2 2, 3 3, 4 4를 모두 허용한다. 그렇기 때문에 NXN개의 경우의 수가 나올 수 밖에 없다. (N과 M은 입력 값이고, N과 M(1), N과 M(2)에서의 N과 M의 의미는 같다.)
코드
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(0);
br.close();
System.out.println(sb);
}
static void backTracking(int row) {
if (row == M) {
for(int value : list){
sb.append(value + " ");
}
sb.append("\n");
return;
}
for (int i = 1; i <= N; i++) {
list[row] = i;
backTracking(row+1);
}
}
}
결과
느낀 점
- N과 M(1), N과 M(2) 문제를 풀었다면, 이 문제는 1분안에는 풀 수 있는 문제이다. (N과 M(2) 코드에서 살짝만 바꾸면 풀리는 문제)
- 빠르게 풀려서 '틀렸습니다' 나오는 거 아닌가 싶었는데 다행히 '맞았습니다!!'가 나왔다.