https://www.acmicpc.net/problem/15649
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
static int N, M;
static int[] arr;
static boolean[] selected;
static BufferedWriter bw;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
bw = new BufferedWriter(new OutputStreamWriter(System.out));
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[M];
selected = new boolean[N+1];
perm(0);
bw.flush();
bw.close();
br.close();
}
static void perm(int n) throws Exception{
if(n == M){
for(int i=0;i<M;i++){
bw.write(Integer.toString(arr[i]));
bw.write(' ');
}
bw.write('\n');
return;
}
for(int i=1;i<=N;i++){
if(selected[i]) continue;
arr[n] = i;
selected[i] = true;
perm(n+1);
selected[i]=false;
}
}
}
다른 답안
package bj;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// 55492 1680
public class BJ_N과M_1 {
static int N, M;
static int[] tgt;
static boolean[] select;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
src = new int[N + 1]; // 0 dummy, 1,2..자연수표현
select = new boolean[N + 1];
tgt = new int[M];
perm(0);
}
static void perm(int tgtIdx) {
// 기저 조건
if( tgtIdx == M ) {
// 순열 완성, complete code
// 옆으로 한개씩 공백과 함께 출력
for (int n : tgt) {
System.out.print(n + " ");
}
System.out.println(); // 개행
return;
}
for (int i = 1; i <= N; i++) {
if( select[i] ) continue;
tgt[tgtIdx] = i;
select[i] = true;
perm(tgtIdx + 1);
select[i] = false;
}
}
}
====
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
// src 배열 X
// StringBuilder 추가
// 23128 236
public class BJ_N과M_1_2 {
static int N, M;
static int[] tgt;
static boolean[] select;
static StringBuilder sb;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
select = new boolean[N + 1];
tgt = new int[M];
sb = new StringBuilder();
perm(0);
System.out.println(sb);
}
static void perm(int tgtIdx) {
// 기저 조건
if( tgtIdx == M ) {
// 순열 완성, complete code
// 옆으로 한개씩 공백과 함께 출력
for (int n : tgt) {
sb.append(n).append(" ");
}
sb.append("\n"); // 개행
return;
}
for (int i = 1; i <= N; i++) {
if( select[i] ) continue;
tgt[tgtIdx] = i; // src[i] 대신 index i 사용
select[i] = true;
perm(tgtIdx + 1);
select[i] = false;
}
}
}