Toy Problem 11 #

이건우·2021년 3월 29일
0

ToyProblem 알고리즘.

목록 보기
3/3

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)

profile
내가 느낌만알고 한줄도 설명할줄 모른다면 '모르는 것'이다.

0개의 댓글