티스토리 뷰
반응형
Java에는 이상하게도 순열 라이브러리가 없다.
그래서 순열이 필요할 경우 직접만들어서 사용해야한다.
static List<int[]> permResult = new ArrayList<>();
static int[] output;
static int n, r;
static boolean[] visited;
public static void perm(int cnt) {
if (cnt == r) {
permResult.add(output.clone()); // 깊은 복사로 새롭게 넣어줘야함
return;
}
for (int i = 0; i < n; i++) {
if (visited[i]) continue;
output[cnt] = i;
visited[i] = true;
perm(cnt + 1);
visited[i] = false;
}
}
# 순열 계산
n개 중 r개를 선택하는 순열을 찾고자 할 때 사용한다.
output은 1,2,3처럼 순열 경우를 임시로 저장하는 버퍼이다. visited와 output을 꼭 할당해줘야 NPE가 발생하지 않는다.
위 처럼 출력하고 싶으면 해당 코드를 작성하면 된다.
(파이썬의 itertools가 그립다..)
반응형