15649 JAVA N๊ณผ M (1)
๐ ๋ฌธ์
์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ก์ ๋, ์๋ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ธธ์ด๊ฐ M์ธ ์์ด์ ๋ชจ๋ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
- 1๋ถํฐ N๊น์ง ์์ฐ์ ์ค์์ ์ค๋ณต ์์ด M๊ฐ๋ฅผ ๊ณ ๋ฅธ ์์ด
๐ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ N๊ณผ M์ด ์ฃผ์ด์ง๋ค. (1 ≤ M ≤ N ≤ 8)
๐ ์ถ๋ ฅ
ํ ์ค์ ํ๋์ฉ ๋ฌธ์ ์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ด์ ์ถ๋ ฅํ๋ค. ์ค๋ณต๋๋ ์์ด์ ์ฌ๋ฌ ๋ฒ ์ถ๋ ฅํ๋ฉด ์๋๋ฉฐ, ๊ฐ ์์ด์ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถํด์ ์ถ๋ ฅํด์ผ ํ๋ค.
์์ด์ ์ฌ์ ์์ผ๋ก ์ฆ๊ฐํ๋ ์์๋ก ์ถ๋ ฅํด์ผ ํ๋ค.
๐ ์์
์์ ์ ๋ ฅ 1
3 1
์์ ์ถ๋ ฅ 1
1
2
3
์์ ์ ๋ ฅ 2
4 2
์์ ์ถ๋ ฅ 2
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
1 4 2 3
1 4 3 2
2 1 3 4
2 1 4 3
2 3 1 4
2 3 4 1
2 4 1 3
2 4 3 1
3 1 2 4
3 1 4 2
3 2 1 4
3 2 4 1
3 4 1 2
3 4 2 1
4 1 2 3
4 1 3 2
4 2 1 3
4 2 3 1
4 3 1 2
4 3 2 1
๐ ์ฑ๊ณต ๊ณผ์
์ฒซ ๋ฒ์งธ ํ๋ ธ์ต๋๋ค.
depth๋ฅผ ํ๋ ์ฉ ์ฆ๊ฐ์ํฌ ๋, depth+1 ์ด ์๋ depth++๋ฅผ ์ฌ์ฉํ๋ค.
depth++์ ๊ฒฝ์ฐ์๋ ์ฌ๊ท์์ ๋น ์ ธ๋์ค๋๋ผ๋ ๊ฐ์ด ๋ค์ ๊ฐ์ํ์ง ์๋๋ค๊ณ ํ๋ค.
๋ฐ๋ผ์ depth++์์ depth+1๋ก ๋ณ๊ฒฝํ๋ค.
๋๋ฒ์งธ ์๊ฐ ์ด๊ณผ
System.out.println ์ ์ฌ์ฉํ์ฌ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฌ๋ค.
์๊ฐ ์ด๊ณผ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด StringBuilder๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค.
์ธ ๋ฒ์งธ ์ฑ๊ณต ์ฝ๋
import java.io.*;
import java.util.*;
public class Main{
public static boolean[] visited;
public static Stack<Integer> answer;
public 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());
sb = new StringBuilder();
Integer n = Integer.parseInt(st.nextToken());
Integer m = Integer.parseInt(st.nextToken());
visited = new boolean[n+1];
answer = new Stack<>();
calculatePer(0, n, m);
System.out.println(sb);
}
public static void calculatePer(int depth, int n, int m){
if(m == depth) {
for (Integer integer : answer) {
sb.append(integer).append(' ');
}
sb.append('\n');
}
for(int i = 1; i <= n; i ++){
if(visited[i]) continue;
visited[i] = true;
answer.add(i);
calculatePer(depth+1, n, m);
visited[i] = false;
answer.pop();
}
}
}