728x90
문제
접근 방식
N과 M (1) 문제와 같은 문제에 조건만 조금 달라져서 풀기가 쉬웠다.
1 ~ 4번 시리즈와는 다르게 정수 배열에 대한 입력이 추가되는데
이를 정렬된 순서로 자기 자신은 제외한 순열을 만들어주면 된다.
코드는 N과 M (1) 문제와 같고 정렬만 추가된다고 이해하면 된다.
풀이
public class Main {
private static StringBuilder sb = new StringBuilder();
private static int n;
private static int m;
private static int[] arr;
private static int[] permutation;
private static boolean[] isUsed;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine(), " ");
arr = new int[n];
permutation = new int[m];
isUsed = new boolean[n];
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr);
createPermutation(0);
System.out.println(sb);
}
private static void createPermutation(int size) {
if (size == m) {
for (int i = 0; i < m; i++) {
sb.append(permutation[i]).append(" ");
}
sb.append("\n");
return;
}
for (int i = 0; i < arr.length; i++) {
if (!isUsed[i]) {
permutation[size] = arr[i];
isUsed[i] = true;
createPermutation(size + 1);
isUsed[i] = false;
}
}
}
}
'Java > Algorithms' 카테고리의 다른 글
[백준] 15656번 : N과 M (7) (1) | 2023.10.29 |
---|---|
[백준] 15655번 : N과 M (6) (0) | 2023.10.29 |
[백준] 15652번 : N과 M (4) (0) | 2023.10.29 |
[백준] 15651번 : N과 M (3) (0) | 2023.10.28 |
[백준] 2448번 : 별 찍기 - 11 (0) | 2023.10.27 |