μ λ² μμ΄μ μ΄μ΄ μ΄λ²μλ μ‘°ν©μ λν΄ μ 리ν΄λ³΄λ € νλ€.
(μμ΄ μ 리λ μλ μ°Έκ³ ! π)
https://seolhee2750.tistory.com/229
π μ‘°ν©
μ‘°ν©μ μλ‘ λ€λ₯Έ nκ°μ μμμμ rκ°λ₯Ό μμμ μκ΄νμ§ μκ³ μ ν νΉμ λμ΄νλ κ²μ λ§νλ€.
μμ΄κ³Όμ μ°¨μ΄μ μ λ°λ‘ 'μμ'!!
μ‘°ν©μ μμλ₯Ό κ°μ§μ§ μμΌλ―λ‘ {1, 2, 3}, {3, 2, 1}μ κ°μ κ²μΌλ‘ λ³Έλ€.
κ·Έλ¦¬κ³ μ‘°ν©λ μμ΄μ²λΌ μ€λ³΅ μ‘°ν©μ΄λΌλ κ°λ μ΄ μ‘΄μ¬νλλ°,
{1, 1, 1}, {1, 1, 2}, ... μ²λΌ μ€λ³΅μ νμ©νλ€. νμ§λ§ μ΄ λλ μμλ₯Ό κ°μ§μ§ μλλ€λ μ μ λμΌ!
π μ 리νμλ©΄,
μ‘°ν©μ΄ κ°μ§λ μμ΄κ³Όμ μ°¨μ΄μ μ 'μμ'μ΄λ€.
κΈ°λ³Έ μ‘°ν©μ μμλ₯Ό κ°μ§λ©° μ€λ³΅μ νμ©νμ§ μκ³ ,
μ€λ³΅ μ‘°ν©μ μμλ₯Ό κ°μ§λ©° μ€λ³΅μ νμ©νλ€.
π κΈ°λ³Έ μ‘°ν© κ΅¬ν
public class Combination1 {
static char[] src = { 'a', 'b', 'c', 'd' };
/*
* κΈ°λ³Έ μ‘°ν©: μ€λ³΅ X, μμ X
* @param nth - λͺ λ²μ§Έ μ νμΈμ§ νν
* @param choosed - μ νλ μμ
* @param startIdx - λͺ λ²μ§Έ μμλΆν° λ°λ³΅νλ©° μ νν κ²μΈμ§ νν
*/
static void makeCombination(int nth, char[] choosed, int startIdx) {
if(nth == choosed.length) { // κΈ°μ 쑰건: choosedλ₯Ό λ€ μ±μ λ€λ©΄ λ
System.out.println(Arrays.toString(choosed));
return;
}
for(int i = startIdx; i < src.length; i++) {
choosed[nth] = src[i];
makeCombination(nth+1, choosed, i+1); // μ€λ³΅ λ°©μ§λ₯Ό μν μ₯μΉ: i+1
}
}
public static void main(String[] args) {
System.out.println("μ‘°ν©");
makeCombination(0,new char[3], 0); // srcμμ 3κ°λ₯Ό λ½μ λ§λ€ μ μλ μ‘°ν©μ λͺ¨λ μΆλ ₯
}
}
nthλ₯Ό μ΄μ©ν΄μ μ‘°ν©μ λͺ λ²μ§Έ μμλ₯Ό μ ννλμ§ νννκ³ ,
choosedμ μ νν μμλ€μ μ°¨λ‘λλ‘ λ΄μ μ‘°ν©μ μμ±μν¬ μ μκ² νλ€.
startIdxλ λ°λ³΅μ μμν κ°μ λ΄λλ°, μ€λ³΅μ λ°©μ§νκΈ° μνμ¬
νμ¬ μ νν μμκ° μλ€λ©΄ κ·Έ λ€μ κ°λΆν° μ νν μ μλλ‘ νλ€.
π μ€λ³΅ μ‘°ν© κ΅¬ν
public class Combination2 {
static char[] src = { 'a', 'b', 'c', 'd' };
/*
* μ€λ³΅ μ‘°ν©: μ€λ³΅ O, μμ X
* κΈ°λ³Έ μ‘°ν©μμ startIdxλ₯Ό +1νλ κ²λ§ λΉΌλ©΄ ok
*
* @param nth - λͺ λ²μ§Έ μ νμΈμ§ νν
* @param choosed - μ νλ μμ
* @param startIdx - λͺ λ²μ§Έ μμλΆν° λ°λ³΅νλ©° μ νν κ²μΈμ§ νν
*/
static void makeCombinationDup(int nth, char[] choosed, int startIdx) {
if(nth == choosed.length) { // κΈ°μ 쑰건: choosedλ₯Ό λ€ μ±μ λ€λ©΄ λ
System.out.println(Arrays.toString(choosed));
return;
}
for(int i = startIdx; i < src.length; i++) {
choosed[nth] = src[i];
makeCombinationDup(nth+1, choosed, i); // μ€λ³΅ λ°©μ§νμ§ μμλ λλ―λ‘ iλ₯Ό κ·Έλλ‘ λ겨μ€
}
}
public static void main(String[] args) {
System.out.println("μ‘°ν©");
makeCombinationDup(0,new char[3], 0); // srcμμ 3κ°λ₯Ό λ½μ λ§λ€ μ μλ μ‘°ν©μ λͺ¨λ μΆλ ₯
}
}
μ€λ³΅ μ‘°ν©μ κΈ°λ³Έ μ‘°ν© κ΅¬νκ³Ό κ±°μ λμΌνλ°,
μ¬κ· νΈμΆ μ startIdx μ리μ i+1μ΄ μλ κ·Έλ₯ iλ₯Ό λ£μ΄μ€λ€λ μ μ΄ μ°¨μ΄μ μ΄λ€.
νμ¬ μ νν μΈλ±μ€λ₯Ό λ€μμ λ μ νν΄λ λλ―λ‘ μ΄λ κ² κ΅¬νν μ μλ€.
π μ 리
μ‘°ν©μ μ€λ³΅ μμ΄ μμλ€μ λ½μ μμλ₯Ό κ°μ§λλ‘ λμ΄ν κ²μ μλ―Ένκ³ ,
μ€λ³΅ μ‘°ν©μ μ€λ³΅μ νμ©νμ¬ μμλ€μ λ½μ μμλ₯Ό κ°μ§λλ‘ λμ΄ν κ²μ΄λ€.
μ‘°ν©κ³Ό μ€λ³΅ μ‘°ν©μ μμ΄κ³Ό λ§μ°¬κ°μ§λ‘ μ¬κ·λ₯Ό μ΄μ©νμ¬ κ΅¬νν μ μλλ°,
μ€λ³΅ μ‘°ν©μ μ‘°ν© κ΅¬ν λ©μλμμ μ€λ³΅μ νμ©νμ§ μλ λΆλΆλ§ μ κ±°ν΄μ£Όλ©΄ λλ€.
'5οΈβ£ CS > Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Java Algorithm Note] λ€μ΅μ€νΈλΌ (feat. BOJ #1753 μ΅λ¨κ²½λ‘) (0) | 2022.08.25 |
---|---|
[Java Algorithm Note] λΆλΆμ§ν© (feat. μ¬κ·) (0) | 2022.08.16 |
[Java Algorithm Note] μμ΄ (feat. μ¬κ·) (0) | 2022.08.15 |
[Swift Algorithm Note] μ΅μ₯ μ¦κ° λΆλΆ μμ΄ 2 (feat. BS) (0) | 2021.08.29 |
[Swift Algorithm Note] μ΅μ₯ μ¦κ° λΆλΆ μμ΄ (feat. DP) (0) | 2021.08.28 |
λκΈ