View
π‘μμ΄(Permutation)
: μλ‘ λ€λ₯Έ nκ°μ μμμμ rκ°λ₯Ό μ€λ³΅μμ΄ μμμ μκ΄μκ²
μ ννλ νΉμ λμ΄νλ κ²μ
μμ΄(permutation)μ΄λΌκ³ νλ€. (λ무μν€)
//nPr
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
R = sc.nextInt();
input = new int[N];
numbers = new int[R];
isSelected = new boolean[N]; // λ°©λ¬Έ μ¬λΆλ₯Ό 체ν¬νκΈ° μν¨
for (int i = 0; i < N; i++) {
input[i] = sc.nextInt();
}
permutation(0);
}
private static void permutation(int cnt) {
if(cnt == R) { // Rκ°μ μμλ₯Ό λ€ λ½μλ€λ©΄ return
System.out.println(Arrays.toString(numbers));
return;
}
for(int i=0; i<N; ++i) {
//λ½μΌλ €λ μκ° μ¬μ© λλ€λ©΄
if(isSelected[i]) continue;
// λ½μΌλ €λ μκ° μ¬μ©λμ§ μμλ€λ©΄
// λ°°μ΄μ λ£μ΄μ€
numbers[cnt] = input[i];
// μ¬μ©μ²λ¦¬ true
isSelected[i] = true;
permutation(cnt+1);
// Rκ°μ μμ μμ± ν μ¬μ©μ²λ¦¬ λ€μ ν΄μ
isSelected[i] = false;
}
}
π¨ μ£Όμ ν¬μΈνΈ
booleanνμ μ isSelected λ°°μ΄μ ν΅ν΄μ μμλ₯Ό λ½μλμ§ μλ½μλμ§ μ²΄ν¬νλ κ²μ΄ ν¬μΈνΈλ€
μ€λ³΅ μμ΄
μ κ²½μ°(1,1,1), (1,2,1),(2,1,1)isSelected λ°°μ΄μ ν΅ν΄ μμ 체ν¬λ₯Ό νμ§ μμλ λλ€
π‘μ‘°ν©(Combination)
: μλ‘ λ€λ₯Έ nκ°μ μμλ₯Ό κ°μ§λ μ΄λ€ μ§ν© (μ¬μ€, μ§ν©μ μλ‘ λ€λ₯Έ μμμ λͺ¨μμΌλ‘ μ μλλ€.)
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
R = sc.nextInt();
input = new int[N];
numbers = new int[R];
for (int i = 0; i < N; i++) {
input[i] = sc.nextInt();
}
combination(0,0);
}
private static void combination(int cnt,int start) {
if(cnt == R) { //Rκ°μ μμλ₯Ό λ€ λ½μλ€λ©΄
System.out.println(Arrays.toString(numbers));
return;
}
for(int i=start; i<N; i++) { //i =start
// λ°°μ΄μ λ£μ΄μ€
numbers[cnt] = input[i];
// λ€μ¬κ·λ₯Ό start+1μ΄ κ°μ΄ μλ i+1
combination(cnt+1,i+1);
}
}
π¨ μ£Όμ ν¬μΈνΈ
μ‘°ν©μ startλ₯Ό κΈ°μ€μΌλ‘ (νμ¬ λ½ν μ λ€μ i+1)λ₯Ό νΈμΆνκΈ°μ μ€λ³΅λ μΌμ΄ μκ³ (2,4,6) (4,2,6)κ³Ό κ°μ κ²½μ°λ μ κ±°νλ€.
μ€λ³΅ μ‘°ν©
μ κ²½μ°, μ¬κ·λ‘ λκΈΈ λ startμ κ°μ μ κ²½ μ¨μ£Όλ©΄ λλ€combination(cnt+1, i) // μκΈ° μμ λ ν¬ν¨λ μ μκ²
π‘λΆλΆμ§ν©(SubSet)
: μ§ν© A={a, b, c}μ λͺ¨λ λΆλΆμ§ν©μ μ°Ύμ λμ΄νλ©΄ λ€μκ³Ό κ°λ€.
β , {a}, {b}, {c}, {a,b}, {b,c}, {a,c}, {a,b,c} μ¦, Aμ λΆλΆμ§ν©μ μ΄μλ 2^nκ°μ΄λ€
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
input = new int[N];
isSelected = new boolean[N];
for(int i=0; i<N; ++i) {
input[i] = sc.nextInt();
}
generateSubSet(0);
}
//count: νμ¬κΉμ§ κ³ λ €ν μμ μ
private static void generateSubSet(int count) {
if(count==N) {
for(int i=0; i<N; ++i) {
if (isSelected[i]){
System.out.print(input[i]+" ");
}
}
System.out.println();
return;
}
// μμ μ ν
isSelected[count] = true;
generateSubSet(count+1);
// μμ λ―Έμ ν
isSelected[count] = false;
generateSubSet(count+1);
}
π¨ μ£Όμ ν¬μΈνΈ
μμλ₯Ό μ ννλ κ²κ³Ό κ·Έλ μ§ μμ λ,
2κ°μ§λ‘ λλμ΄ κ΅¬ννλ κ²μ΄ μ€μ
'μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java] BFS / DFS μΈμ 리μ€νΈμ μ¬κ· (0) | 2022.08.30 |
---|---|
[Java] μμ΄/μ‘°ν©/λΆλΆμ§ν© (0) | 2022.08.30 |
[Java] μ‘°ν© (Combination) (0) | 2022.08.30 |
[Java] μμ΄(permutation) (0) | 2022.08.30 |
[Java] BFS(Breadth First Search) (0) | 2022.08.30 |