11_powerSet
이런 바탕으로 접근하였다.
1. 문제 흐름 파악 -> 문제에서 나에게 어떤 상황이 주어졌는가?
'abcd' 입력받음 . -> 이것을 부분집합화함.
['a', 'b','c','d','ab' 'cd', 'ac','ad','bd' 'bc' ...]
// 반복문 로직이 어떻게되었지 ?
a b c d a b c d 이렇게 만 뽑힘..
반복문으로 하나씩 뽑고나서 result = []에 하나씩 푸쉬 해줌]
그리고나서 조건문 result.includes() ===false 이면, 푸쉬 아니면 안넣어줌.
했지만, 내가 원하는대로 그렇게 반복이 되질않았다. while문을 써야하는것일까..? 아니면 다른 방법이라도 있는것일까 ?
레퍼런스를 보자..
const powerSet = function (str) {
// 정렬
const sorted = str.split('').sort();
// 중복 제거
const deduplicated = sorted.reduce((acc, item) => {
if (acc[acc.length - 1] === item) {
return acc;
} else {
return acc.concat(item);
}
});
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();
};
그리고 아래는 내가 콘솔로그로 규명해본 결과..
1) 데이터를 배열로 만들기
2) 중복된 요소 제거
3)