Problem Solving/BOJ
백준 - 15649 N과 M(1)
채니_
2021. 2. 7. 13:59
[1,1] 허용X & [1,2] [2,1] 다른것으로 봄 ->중복X 순열
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int M;
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws NumberFormatException, IOException {
//구할것: 1부터 N까지 자연수 중 중복없이 M개 고른 수열
//입력 N(1부터 N까지) M(M개를 뽑는)
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
int N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
int [] arr = new int[N];
for (int i = 1; i <= arr.length; i++) {
arr[i-1]= i;
}
permutation(arr, new int[M],new boolean[arr.length],0);
System.out.println(sb);
}
private static void permutation(int[] arr, int[] sel, boolean[] v, int k) {
if(k==M) {
for (int i = 0; i < sel.length; i++) {
sb.append(sel[i]).append(' ');
}sb.append('\n');
return;
}
for (int i = 0; i < arr.length; i++) {
if(!v[i]) {
v[i]=true;
sel[k]=arr[i];
permutation(arr, sel, v, k+1);
v[i]=false;
}
}
}
}
1. StringBuilder사용
2. Print 사용
시간을 줄이기 위해 가능하면 꼭 StringBuilder를 사용하자!