반응형
문제
하나의 집합을 의미하는 문자열을 입력받아 각 문자를 가지고 만들 수 있는 모든 부분집합을 리턴해야 합니다.
입력
인자 1 : str
- string 타입의 공백이 없는 알파벳 소문자 문자열
출력
- 배열(arr)을 리턴해야 합니다.
- arr[i]는 각 부분집합의 원소로 구성된 문자열
주의사항
- 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']
코드
const powerSet = function (str) {
// TODO: 여기에 코드를 작성합니다.
// 정렬
const sorted = str.split('').sort();
// 중복 제거
const deduplicated = [...new Set(sorted)].join('')
let subSets = [];
const pickOrNot = (idx, subset) => {
// base case (문제를 더 이상 더 작은 단위로 쪼갤 수 없는 경우)
if (idx === deduplicated.length) {
// 마지막 문자까지 검토한 경우
subSets.push(subset);
return;
}
// recursive case
// idx번째 문자가 포함되지 않는 경우
pickOrNot(idx + 1, subset);
// idx번째 문자가 포함되는 경우
pickOrNot(idx + 1, subset + deduplicated[idx]);
};
pickOrNot(0, '');
return subSets.sort();
};
반응형
'코드스테이츠 SEB FE 41기 > 데일리 코딩(Hard)' 카테고리의 다른 글
[알고리즘/javascript]quickSort (0) | 2022.11.29 |
---|---|
[알고리즘/javascript]insertionSort (0) | 2022.11.29 |
[알고리즘/javascript]binarySearch (0) | 2022.11.23 |
[알고리즘/javascript]orderOfPresentation (0) | 2022.11.23 |
[알고리즘/javascript]uglyNumbers (0) | 2022.11.23 |