반응형
1). 문제 : https://www.acmicpc.net/problem/15654
2). 풀이 :
계속 같은 수열 로직의 반복이라 코드를 복사해서 사용하고있다...
이번에는 지난번 로직과 같다고 본다..
우선 방문여부로 중복체크하고, 입력받은 값을 Arrays.sort(); 로 정렬하여 사전순으로 두었다.
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());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
int[] arr = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
//정렬
Arrays.sort(arr);
int[] output = new int[N];
boolean[] visited = new boolean[N];
permute(arr, output, visited,0, M, -1);
System.out.println(sb);
}
static void permute(int[] arr, int[] output, boolean[] visited, int depth, int cnt, int before) {
if(depth == cnt) {
print(output,cnt);
return;
}
for (int i = 0; i < arr.length; i++) {
if(!visited[i]) {
visited[i]= true;
output[depth] = arr[i];
permute(arr, output, visited,depth+1, cnt, arr[i]);
visited[i]= false;
}
}
}
static void print(int[] output, int cnt) {
for (int i = 0; i < cnt; i++) {
sb.append(output[i]+" ");
}
sb.append("\n");
}
반응형