๋ฐ์ํ
๋ฌธ์ ๋ถ์
์ ๋ฒ N๊ณผ M(1) ์์ ์ด์ง ๋ณํ์ด ๋ ๋ฌธ์ ๋ค.
์์ ๋ฅผ ๋จผ์ ์ดํด๋ณด๋ฉด
์์ฐ์์ ๋ฒ์๋ 4์ด๊ณ , 2๊ฐ์ฉ ์ถ๋ ฅ์ํค๋ฉด ๋๋๋ฐ,
๊ฐ์ ์๊ฐ ์ค๋ณต๋์ ์ฐ์๋๋ฉด ์๋๊ณ , ์์ด๋ ์ค๋ณต์ด ๋๋ฉด ์๋๋ค. (์๋ฅผ ๋ค์ด, [1 2] ์ [2 1]์ ๊ฐ๋ค๊ณ ๋ณธ๋ค.)
์คํ ๊ณผ์
๊ทธ๋ฆผ์ฒ๋ผ, arr[0]์ for๋ฌธ์ผ๋ก ๋๋ฉด์ i๊ฐ์ ๋ฃ์ด์ฃผ๊ณ , ๋ค์ arr[1]๊ฐ์ ์ฌ๊ท ํธ์ถ์ ๋๋ฉด์ ์ฑ์ฐ๋ ์์ผ๋ก ์งํ๋๋ค.
์ด ์คํ ๊ณผ์ ์ ์ฝ๋๋ก ๋ํ๋ด๋ฉด,
static int N, M;
public static void main(String[] args){
// N, M ์
๋ ฅ
dfs(0); // 0๋ถํฐ ์์!
}
static void dfs(int index) {
for(int i=1; i<=N; i++) {
arr[i] = i; // ํ์ฌ ์ธ๋ฑ์ค์ ๊ฐ์ ๋ฃ์ด์ฃผ๊ณ
visit[i] = true; // ๋ฐฉ๋ฌธ ์ฌ๋ถ ์ฒดํฌ
dfs(index + 1); // ๋ค์ ์ธ๋ฑ์ค ์ฑ์ฐ๊ธฐ ์ํด ๋ค์ ์ฌ๊ทํธ์ถ!
}
}
i๊ฐ 2๊ฐ ๋ ๋, visit์ ๊ฐ์ visit[1]๋ง true๋ก ๋ฐ๋์ด์ผ ํ๋ค.
static void dfs(int index) {
for(int i=1; i<=N; i++) {
arr[i] = i;
visit[i] = true;
dfs(index + 1);
/* ์ฌ๊ท ํธ์ถ์ด ๋๋ ํ์ ํ์ฌ i๋ง true๋ก ๋ฐ๊พธ๊ณ ๋๋จธ์ง๋ false๋ก ํด์ค๋ค. */
for(int j=i+1; j<=N; j++) {
visit[j] = false;
}
}
}
์ข ๋ฃ ์กฐ๊ฑด
์ฌ๊ท ํธ์ถ๋ก ๋๊ธฐ๋ ํ๋ผ๋ฏธํฐ๊ฐ M๊ณผ ๊ฐ์์ง๋ ์์ ์ ์ถ๋ ฅ์ํค๋ฉด ๋๋ค.
static void dfs(int index) {
if( index==M ){
for(int i=0; i<M; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
return;
}
..
}
์ ์ฒด ์ฝ๋
import java.io.*;
import java.util.StringTokenizer;
public class Main {
static int M, N;
static int[] arr;
static boolean[] visit;
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
static int index = 1;
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(bf.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[M];
visit = new boolean[N + 1];
recursion(0);
bw.flush();
bw.close();
}
public static void recursion(int index) throws IOException {
if (index == M) {
for (int i = 0; i < M; i++) {
bw.write(arr[i] + " ");
}
bw.write("\n");
return;
}
for (int i = 1; i <= N; i++) {
if(!visit[i]) {
arr[index] = i;
visit[i] = true;
recursion(index + 1);
for (int j = i + 1; j <= N; j++) {
visit[j] = false;
}
}
}
}
}
๋ฐ์ํ