이제 멱집합의 개념은 알겠음. 하지만 식으로 작성하는것이 여전히 어려웠다.
그래서 그냥 템플릿을 외워버리기로 했다. 끝.
👻 문제1.
한가지 밥에 n개의 반찬이 있을때, 밥과 함께 먹을 수 있는 반찬의 모든 경우의 수를 배열에 담아 리턴하세요.
👻 주의사항
반찬은 영문으로 작성이 되어 있습니다.
반찬은 중복되지 않습니다.
반찬을 먹지 않는 것도 포함됩니다. (출력되는 2차원 배열은 빈 배열을 포함합니다.)
반찬은 3개 이상 99개 이하입니다.
출력되는 배열은 전부 사전식 순서(lexical order)로 정렬되어야 합니다.👻 입출력 예시
let output = missHouseMeal(["eggroll", "kimchi", "fishSoup"]); console.log(output); /* [ [], [ 'eggroll' ], [ 'eggroll', 'fishSoup' ], [ 'eggroll', 'fishSoup', 'kimchi' ], [ 'eggroll', 'kimchi' ], [ 'fishSoup' ], [ 'fishSoup', 'kimchi' ], [ 'kimchi' ] ] */
입출력예시에 나온것처럼 주어진 배열안의 반찬들을 먹을수 있는 모든 경우의 수를 구해야 한다 단, 한가지메뉴가 여러번 겹치지 않도록 먹어야 하며, ([eggroll,eggroll,eggroll] -> 이런식으로 먹을 수 없음.)
반찬을 전혀 먹지않은 경우도 포함시켜야 한다. ([])
function missHouseMeal(banchan) {
// TODO: 여기에 코드를 작성합니다.
let result = [];
let sorting = banchan.sort();
const recursive = (count = 0 ,banchanArr=[]) => {
if(idx === banchan.length){
result.push(banchanArr)
return
}
recursive(count+1,banchanArr)
recursive(count+1,banchanArr.concat(banchan[count]))
}
recursive()
return result.sort();
}
👻 문제2.
하나의 집합을 의미하는 문자열을 입력받아 각 문자를 가지고 만들 수 있는 모든 부분집합을 리턴해야 합니다.
👻 주의사항
arr[i]는 각 부분집합을 구성하는 원소를 연결한 문자열입니다.
arr[i]는 알파벳 순서로 정렬되어야 합니다.
집합은 중복된 원소를 허용하지 않습니다.
부분집합은 빈 문자열을 포함합니다.
arr은 사전식 순서(lexical order)로 정렬되어야 합니다.👻 입출력 예시
let output1 = powerSet('abc'); console.log(output1); // ['', 'a', 'ab', 'abc', 'ac', 'b', 'bc', 'c'] let output2 = powerSet('jjump'); console.log(output2); // ['', 'j', 'jm', 'jmp', 'jmpu', 'jmu', 'jp', 'jpu', 'ju', 'm', 'mp', 'mpu', 'mu', 'p', 'pu', 'u']
앞의 문제와 상당히 비슷하다. 아니, 거의 똑같다고 볼 수 있다.
단지 배열이냐 string 이냐, 그 차이뿐.
그리고 이 문제에서는 output2 예시를 보면 문자열에 중복되는 문자가 있으나 최종 출력본에는 중복되는 문자는 하나만 나오는 것을 볼 수 있다.
기존 풀었던 문제에 중복되는 문자열에 대한 함수만 추가하면 될것 같다.
const powerSet = function (str) {
// TODO: 여기에 코드를 작성합니다.
let sorting = str.split('').sort();
// ["j", "j", "m", "p", "u"]
let result = [];
let dupe = sorting.reduce((a,c)=>{
if(a[a.length-1] === c){
return a;
}else{
return a.concat(c)
}
});
const recursive = (n = 0, strs = '') => {
if(n === dupe.length){
result.push(strs);
return;
}
recursive(n+1,strs);
recursive(n+1,strs.concat(dupe[n]))
}
recursive();
return result.sort();
};