순열

Ajisai·2023년 8월 2일
0

Algorithm

목록 보기
3/11

순열

배열 원소 뽑아내기

import java.util.*;

public class Main {
	public static void main(String[] args) {
		int r = 3;
		int[] a = {1, 2, 3, 4};
		permutations(a, r);
		System.out.println();
	}

	public static void permutations(int[] a, int r) {
        r = Math.min(r, a.length);
		permutations(a, new int[r], new boolean[a.length], 0, a.length, r);
	}

	private static void permutations(int[] a, int[] dest, boolean[] v, int idx, int n, int r) {
		if(idx == r) {
			System.out.println(Arrays.toString(dest));
			return;
		}

		for(int i = 0; i < n; i++) {
			if(!v[i]) {
				v[i] = true;
				dest[idx] = a[i];
				permutations(a, dest, v, idx + 1, n, r);
				v[i] = false;
			}
		}
	}
}

인덱스 뽑아내기

import java.util.*;

public class Main {
	public static void main(String[] args) {
		int n = 5, r = 2;
		permutations(n, r);
		System.out.println();
	}

	public static void permutations(int n, int r) {
		r = Math.min(n, r);
		permutations(new int[r], new boolean[n], 0, n, r);
	}

	private static void permutations(int[] dest, boolean[] v, int idx, int n, int r) {
		if(idx >= r) {
			System.out.println(Arrays.toString(dest));
			return;
		}

		for(int i = 0; i < n; i++) {
			if(!v[i]) {
				v[i] = true;
				dest[idx] = i;
				permutations(dest, v, idx + 1, n, r);
				v[i] = false;
			}
		}
	}
}

출력만 하는 게 아니라 2차원 배열 등에 저장하려면 그냥 정적변수 하나 선언해서 거기다 저장하는 게 편하다.
함수 자체적으로 반환하기는 어려움.
파이썬처럼 중첩 함수가 되면 모를까

중순(중복순열이라는 뜻ㅎ)

배열 요소 뽑아내기

import java.util.*;

public class Main {
	public static void main(String[] args) {
		int r = 3;
		int[] a = {1, 2, 3, 4};
		permutationsWithRepetition(a, r);

	}

	public static void permutationsWithRepetition(int[] a, int r) {
        r = Math.min(r, a.length);
        permutationsWithRepetition(a, new int[r], 0, a.length, r);
	}

	private static void permutationsWithRepetition(int[] a, int[] dest, int idx, int n, int r) {
		if(idx == r) {
			System.out.println(Arrays.toString(dest));
			return;
		}

		for(int i = 0; i < n; i++) {
			dest[idx] = a[i];
			permutationsWithRepetition(a, dest, idx + 1, n, r);
		}
	}
}

배열 인덱스 뽑아내기

import java.util.*;

public class PermMain {
	public static void main(String[] args) {
		int n = 5, r = 3;
		permutationsWithRepetition(n, r);
	}

	public static void permutationsWithRepetition(int n, int r) {
        r = Math.min(n, r);
        permutationsWithRepetition(new int[r], 0, n, r);
	}

	private static void permutationsWithRepetition(int[] dest, int idx, int n, int r) {
		if(idx == r) {
			System.out.println(Arrays.toString(dest));
			return;
		}

		for(int i = 0; i < n; i++) {
			dest[idx] = i;
			permutationsWithRepetition(dest, idx + 1, n, r);
		}
	}
}
profile
Java를 하고 싶었지만 JavaScript를 하게 된 사람

0개의 댓글

관련 채용 정보