Jieunnyμ λΈλ‘κ·Έ
S4) Unit 11. μκ³ λ¦¬μ¦ λ¬Έμ νμ΄(μμ΄, μ‘°ν©, Greedy, λ©±μ§ν©) λ³Έλ¬Έ
S4) Unit 11. μκ³ λ¦¬μ¦ λ¬Έμ νμ΄(μμ΄, μ‘°ν©, Greedy, λ©±μ§ν©)
Jieunny 2023. 4. 6. 15:37π λ¬Έμ
μμ μ΄ κ°μ₯μ κ° μ¬μ΄ μ°μΈμ΄μλ μ€λ¦¬μλ₯Ό μ€λμκ² λΉΌμ겨 νκ° λ μ‘°μ§λ λΈλ λ, λ§·κ³Ό ν¨κ» μ€λ μμ μ μΉ΄μ§λ
Έ μ§νμ μλ κΈκ³ λ₯Ό νΈκΈ°λ‘ ν©λλ€. μ¨κ° νΈλ©μ λ«κ³ λλμ΄ κΈκ³ μ μ§μ
ν μ‘°μ§μ μΌνλ€. μ‘°μ§λ μ΄μμ€μ κ°μ₯μμ ννμ΄ κ³΅λΆν μκ³ λ¦¬μ¦μ μ΄μ©ν΄ target κΈμ‘μ νμΉ μ μλ λ°©λ²μ κ²½μ°μ μλ₯Ό κ³μ°νκΈ° μμν©λλ€.
μλ₯Ό λ€μ΄ $50 μ νμΉ λ $10, $20, $50 μ΄ μλ€λ©΄ λ€μκ³Ό κ°μ΄ 4 κ°μ§ λ°©λ²μΌλ‘ $50μ νμΉ μ μμ΅λλ€.
- $50 ν μ₯μ νμΉλ€
- $20 λ μ₯, $10 ν μ₯μ νμΉλ€
- $20 ν μ₯, $10 μΈ μ₯μ νμΉλ€
- $10 λ€μ― μ₯μ νμΉλ€
νμΉκ³ μΆμ target κΈμ‘κ³Ό κΈκ³ μ μλ λμ μ’
λ₯ type μ μ
λ ₯λ°μ, μ‘°μ§κ° target μ νμΉ μ μλ λ°©λ²μ μλ₯Ό 리ν΄νμΈμ.
βοΈ νμ΄
β λ νΌλ°μ€ μ½λ λ΄λ λͺ¨λ₯΄κ² λ€.
κ²½μ°μ μλ₯Ό ꡬνμ§ μμλλ° μ΄λ»κ² λ°°μ΄μ μ μ₯λμλκ±°μ§..
function ocean(target, type) {
// bag μ΄λΌλ λ°°μ΄μ κΈμ‘μ λ§λ€ μ μλ κ²½μ°μ μλ₯Ό κΈ°λ‘
// κ° μΈλ±μ€ no# = λ§λλ €λ κΈμ‘ μ μλ―Έ
// ex) target = 5, type = [1, 2, 5] λ©΄
// bag[3] = 2 => 3μμ λ§λλ κ²½μ°μ μ = 1λ§ μ¬μ© & 1,2 ν¨κ» μ¬μ© (1*3, 1 + 2)
// bag[4] = 3 => 4μμ λ§λλ κ²½μ°μ μ = 1λ§ μ¬μ© & 1,2 ν¨κ» μ¬μ© (1*4, 1*2 + 2, 2*2)
// bag[5] = 4 => 5μμ λ§λλ κ²½μ°μ μ = 1λ§ μ¬μ© & 1,2 ν¨κ» μ¬μ© & 1, 2, 5 ν¨κ» μ¬μ© (1*5 , 1*3 + 2, 1 + 2*2, 5*1)
// 0 μ λ§λ€ μ μλ κ²½μ°λ μ무κ²λ μ ννμ§ μμΌλ©΄ λκΈ° λλ¬Έμ bag[0] = 1 λ‘ μ΄κΈ°κ° μ€μ
let bag = [1];
// μΈλ±μ€ no# = λ§λλ €λ κΈμ‘ μ΄κΈ° λλ¬Έμ
// bag μ target κΈμ‘λ§νΌμ κΈΈμ΄λ₯Ό κ°μ§ λ°°μ΄μ λ§λ€μ΄ μ£Όκ³ ,
// κ²½μ°μ μλ₯Ό μ μ₯νκΈ° μν΄ μ΄κΈ°κ°μ λͺ¨λ 0μΌλ‘ λ§λ€μ΄ μ€λ€
for(let i = 1; i <= target; i++)
bag[i] = 0;
// λμ μ’
λ₯κ° λ΄κ²¨μλ λ°°μ΄μ μμ°¨μ μΌλ‘ νμ
for(let i = 0; i < type.length; i++) {
// target κΈμ‘κΉμ§ μμ°¨μ μΌλ‘ 1μ© μ¦κ°νλ©΄μ
for(let j = 1; j <= target; j++)
// bagμ μΈλ±μ€κ° type[i] λ³΄λ€ ν° κ΅¬κ°λ§
// (μμ ꡬκ°μ type[i]λ‘ λ§λ€ μ μλ κΈμ‘μ΄κΈ° λλ¬Έμ νμν νμκ° μλ€)
if(type[i] <= j)
// κΈ°μ‘΄ κ²½μ°μ μμ type[i]λ₯Ό λΊ κΈμ‘μ λ§λ€ μ μλ κ²½μ°μ μλ₯Ό λν΄μ€λ€
bag[j] += bag[j-type[i]];
console.log(bag)
}
// bag μ target μΈλ±μ€μ target κΈμ‘μ νμΉ μ μλ κ²½μ°μ μκ° μμ΄λ―λ‘
// ν΄λΉ κ°μ 리ν΄ν΄ μ€λ€
return bag[target];
}
π λ¬Έμ
κ°μλ°μ보 κ²μμ 2μΈ μ΄μμ μ¬λμ΄ λμμ 'κ°μ, λ°μ, 보'λ₯Ό μΈμΉκ³ λμμ κ°μ, λ°μ λλ 보 μ€μμ ν κ°μ§λ₯Ό μλ―Ένλ μ λͺ¨μμ λ΄λ°μ΄ μΉλΆλ₯Ό κ²°μ μ§λ κ²μμ
λλ€. μΈ νμ κ°μλ°μ보 κ²μμ ν κ²½μ°, ν μ¬λμ μΈ λ²μ μ ν(μ. κ°μ, κ°μ, 보)μ ν μ μμ΅λλ€. μΈ λ²μ μ νμΌλ‘ κ°λ₯ν λͺ¨λ κ²½μ°μ μλ₯Ό ꡬνλ ν¨μλ₯Ό μμ±ν©λλ€.
βοΈ νμ΄
π‘ μ€λ³΅μμ΄
function rockPaperScissors (n=3) {
const result = [];
const arr = [['rock'], ['paper'], ['scissors']];
if(n===1) return [['rock'], ['paper'], ['scissors']];
// μ¬κ·κ° λλ μ μλ κΈ°μ€μ λ§λ€μ΄μ£Όκ³
let prev = rockPaperScissors(n - 1);
// νλλ λ½μμΌλ λ§μ½ n=3μ΄λΌλ©΄ 2κ°λ§ λ λ½μΌλ©΄ λλ€.
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < prev.length; j++) {
result.push([...arr[i], ...prev[j]]);
// λ½μλ μ λ ν©μ³μ€λ€
}
}
return result;
};
π λ¬Έμ
κ°μ μ΄λλ‘ νμ μΉμΉμ₯ꡬνλ 'μΉμΉμ₯ꡬ μΉν¨μ§'μ λΉκ²°μ μμ€μ μλ€. μλ§μ νμ¬ λΈλλ μΉν¨μ§λ€μ΄ μΉμΉμ₯ꡬ μΉν¨μ§μ μμ€ λΉκ²°μ μμλ΄λ €κ³ νμΌλ λΉλ²ν ν¬κΈ°νλ€. κ·Έ μ΄μ λ 5λμ§Έ λ΄λ €μ€λ 'λΉλ°μ μΉμΉμ₯ꡬ μΉν¨ μμ€ λΉμ¨ λ μνΌ'λ 70μ΅ μΈκ΅¬ μ€ μ¬μ₯λλ§ μκ³ μκΈ° λλ¬Έμ΄λ€. μ΅κ·Ό, λ리꾼 μ¬μ΄μμ μ΄ λ μνΌμ μΌλΆλΆμ λ°μ·νλ€λ μλ¬Έμ λ£κ² λμλ€. κ·Έ μλ¬Έμ λ€μκ³Ό κ°λ€.
- N κ°μ§μ μ¬λ£ μ€μ λ¨ M κ°μ§λ§μ μ¬μ©νμ¬ μ‘°ν©ν λͺ¨λ κ²½μ°μ μ μ€ νλμ΄λ€.
- μ¬λ£λ 0κ³Ό 1λ‘λ§ μ΄λ£¨μ΄μ§ μ«μλ‘ μνΈνκ° λμ΄ μκ³ , νμ 1λ‘ μμνλ©° 볡νΈνλ₯Ό ν μ μλ€.
- λ¨, 0μ΄ 3κ° μ΄μμΈ μ¬λ£λ μν μ¬λ£μ΄κΈ° λλ¬Έμ μ μΈνλ€.
- μ¬λ£μ μμμ λ°λΌ λ§μ΄ λ¬λΌμ§κΈ° λλ¬Έμ, μ¬λ£λ₯Ό λ£λ μμκ° λ€λ₯΄λ€λ©΄ λ€λ₯Έ λ μνΌμ΄λ€.
μ΄ μλ¬Έμ μ°Έκ³ νμ¬ 'λΉλ°μ μΉμΉμ₯ꡬ μΉν¨ μμ€'κ° λ μ μλ κ²½μ°μ μλ₯Ό λͺ¨λ λ°ννλ ν¨μλ₯Ό μμ±νμΈμ.
βοΈ νμ΄
π‘ μμ΄
function newChickenRecipe(stuffArr, choiceNum) {
const answer = [];
const grad = zeroThree(stuffArr);
if(choiceNum === 1) return grad.map((item) => [item]);
grad.forEach((item, idx, origin) => {
const remain = [...origin.slice(0, idx), ...origin.slice(idx+1)];
// μ νν μμ μ μΈν λλ¨Έμ§ => μμ μ κ²½μ¨μ€μΌνλ€.
const rePermutation = newChickenRecipe(remain, choiceNum-1);
// μ μΈν μ λ€ μ€μμ λ€μ λ½λλ°, μκΉ νλ λ½μμΌλκΉ -1ν΄μ μ¬κ· νΈμΆν΄μ£ΌκΈ°
const result = rePermutation.map((el) => [item, ...el]);
// μ²μμ λ½μ λμ μ μ°κ²°ν΄μ£ΌκΈ°
answer.push(...result);
});
return answer;
}
function zeroThree(stuffArr){
// 0μ΄ 3κ° μ΄μμ΄λ©΄ μν μμμ΄λ―λ‘ μ μΈν΄μ£ΌκΈ°
let zeroThree = /0{3}/;
let grad = stuffArr.filter((item) => {
return zeroThree.test(item) === false;
});
return grad;
}
π λ¬Έμ
νλ²ν λΈλμ κ²μμμ μμλ‘ ν¨λ°°νμ ν₯λ―Έκ° λ¨μ΄μ§ κΉμ½λ©μ λ°νμ§μκ² κ²μλ£°μ λ³ννμ¬ μλ‘μ΄ μΉ΄λ λμ΄λ₯Ό ν΄ λ³Ό κ²μ μ μν©λλ€. μλ‘μ΄ λ£°μ λ€μκ³Ό κ°μ΅λλ€.
1. μ«μλ‘ μ΄λ£¨μ΄μ§ μΉ΄λλ₯Ό μ¬λ¬ μ₯ λ°μ΅λλ€.
2. 3μ₯μ© μΉ΄λλ₯Ό κ³ λ₯΄κ³ , 3μ₯μ μ ν μ«μλ€μ ν©μ΄ μμμΈμ§ νμΈν©λλ€.
3. λ°μλ μΉ΄λλ‘ λ§λ€ μ μλ μμμ κ°μκ° λ§μ μ¬λμ΄ μ΄κΈ°κ² λ©λλ€.
μλ‘, [1, 2, 3, 4]λΌλ μΉ΄λλ₯Ό λ°μμ λ λ§λ€ μ μλ μ«μλ 6, 7, 8, 9μ΄κ³ , μμλ 7 νλμ΄κΈ° λλ¬Έμ κ°μ§κ³ μλ μμμ κ°μλ 1κ°μ
λλ€. [2, 3, 4, 8, 13]λΌλ μΉ΄λλ₯Ό λ°μμ λ λ§λ€ μ μλ μ«μλ 9, 13, 18, 14, 19, 23, 15, 20, 24, 25μ΄κ³ , μμλ 13, 19, 23 μ΄ 3κ°μ΄κΈ° λλ¬Έμ κ°μ§κ³ μλ μμμ κ°μλ 3κ°μ
λλ€.
κ²μμ μ§ννκΈ° μ μ μμμ λν΄ μλ¬΄λ° μ§μμ΄ μλ λ°νμ§λ κ²μμ λ©°μΉ λ―Έλ£¬ λ€, κ²μμ λ£°μ λ°λ₯΄λ ν¨μλ₯Ό λ§λ€κΈ°λ‘ νμ΅λλ€. μμμ μ½ν λ°νμ§λ₯Ό λμ μ¬λ¬ μ₯μ μΉ΄λ μ€ μΈ μ₯μ© μ‘°ν©ν΄ μμκ° λλ κ²½μ°μ μλ₯Ό 리ν΄νλ ν¨μλ₯Ό μμ±ν΄ μ£ΌμΈμ.
βοΈ νμ΄
π‘ μ‘°ν© + μμ ꡬνκΈ°
function boringBlackjack(cards) {
let answer = 0;
const permutation = combinations(cards, 3);
// μ‘°ν©μΌλ‘ μΉ΄λ 3μ₯ λ½μμ£ΌκΈ°
permutation.map((item) => {
// μ‘°ν© κ°μ Έμμ κ° μ‘°ν©μ ν© κ΅¬νκ³
let sum = 0;
for(let i=0; i<item.length; i++){
sum += item[i];
}
if(isPrime(sum)) answer++;
// κ·Έ ν©μ΄ μμμΈμ§ νμΈ
})
return answer;
}
function combinations(arr, choiceNum){
// μ‘°ν© ν¨μ
const answer = [];
if(choiceNum === 1) return arr.map((item) => [item]);
arr.forEach((item, idx, origin) => {
const remain = [ ...origin.slice(idx+1)];
// μ‘°ν©μ μμ μκ΄ μμΌλκΉ μμ΄κ³Όλ λ€λ₯΄κ² ν΄μ€μΌνλ€.
const rePermutation = combinations(remain, choiceNum-1);
// μ μΈν μ λ€ μ€μμ λ€μ λ½λλ°, μκΉ νλ λ½μμΌλκΉ -1ν΄μ μ¬κ· νΈμΆν΄μ£ΌκΈ°
const result = rePermutation.map((el) => [item, ...el]);
// μ²μμ λ½μ λμ μ μ°κ²°ν΄μ£ΌκΈ°
answer.push(...result);
});
return answer;
}
function isPrime(num){
// μμ νμΈ ν¨μ
if(num === 2) return true;
if(num === 1) return false;
for(let i=2; i<=Math.ceil(Math.sqrt(num)); i++){
if(num%i === 0) {
return false;
}
}
return true;
}
π λ¬Έμ
κΉμ½λ©μ λͺ λ
μ ν΄μΈ μΆμ₯ λμ λ³Έκ°μ λ΄λ €μμ΅λλ€. μ€λλ§μ 보λ κΉμ½λ©μ μΌκ΅΄μ λ°κ°μ λ λΆλͺ¨λμ μλ€λ¦¬κ° λΆλ¬μ§ μ λλ‘ μμμ λ§λ€μμ΅λλ€. κ°λμ μ¬νλ μ μ, μμμ μμ μμ¬λ₯Ό νλ €λ κΉμ½λ©μ 무μλΆν° λ¨Ήμ΄μΌ λ μ§ κΉμ μκ°μ λΉ μ‘μ΅λλ€. μ μ±μ€λ½κ² μ°¨λ € μ£Όμ λ§νΌ, μ΅λν λ§μ λ°©λ²μΌλ‘ λ€μνκ² λ¨Ήκ³ μΆμκΈ° λλ¬Έμ
λλ€.
λ°₯μ ν κ°μ§μ΄λ©° λ°μ°¬μ λ€μμΌ λ, λ°₯κ³Ό ν¨κ» λ¨Ήμ μ μλ λ°μ°¬μ λͺ¨λ κ²½μ°μ μλ₯Ό λ°°μ΄μ λ΄μ 리ν΄νμΈμ.
βοΈ νμ΄
π‘ λ©±μ§ν©
function missHouseMeal(sideDishes) {
const result = [];
function recursion(subset, start) {
subset.sort();
// μ¬μ μμΌλ‘ μ λ ¬
result.push(subset);
for(let i=start; i<sideDishes.length; i++){
recursion([...subset, sideDishes[i]], i+1);
// λΆλΆ μ§ν©μ forλ¬Έ λλ©΄μ κ³μ λλ €κ°λ€.
}
}
recursion([], 0);
result.sort();
return result;
}
'CodeStates > Training' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
S4) Unit12. [Coz' Mini Hackathon] TodoList λ§λ€κΈ° (0) | 2023.04.07 |
---|---|
S4) Unit 4. [μ€μ΅] Custom Hook (0) | 2023.03.24 |
S4) Unit 3. [μ€μ΅] 리μ‘νΈ μΉμ± λ²λ€λ§ ν λ°°ν¬νκΈ° (0) | 2023.03.21 |
S4) Unit 3. [μ€μ΅] κ°λ¨ν μΉμ± λ²λ€λ§ ν λ°°ν¬νκΈ° (0) | 2023.03.20 |
S4) Unit 2. [μ€μ΅] λ°μν μΉ κ΅¬ννκΈ° (0) | 2023.03.17 |