알고리즘: powerSet

Kyoorim LEE·2022년 7월 13일
0

알고리즘TIL

목록 보기
18/40

문제

하나의 집합을 의미하는 문자열을 입력받아 각 문자를 가지고 만들 수 있는 모든 부분집합을 리턴해야 합니다.

입력

인자 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']

풀이

  1. split('')으로 문자열 분리 후 sort()로 정렬 => arr
  2. 결과가 담길 배열 [""] 선언 => result
  3. arr의 각 요소를 떼어서 result 요소에 돌아가며 붙여주는 함수 선언 => func
const powerSet = function(str) {
	let arr = str.split("").sor();
	let result = [""];
  
  	let func = (ele, result) => { // result 요소를 돌아가며 ele를 추가할 함수 선언
      let copy = result.slice()// result 배열 복사본
      for(let i =0; i < copy.length; i++) {
      	copy[i] += target
        result.push(copy[i])
      }
      return result;
    }
    for(let i = 0; i < arr.length; i++) { // arr를 돌면서 요소를 하나쌕 빼냄
      if(!result.includes(arr[i])){
        func(arr[i], result)
    }
   }
  return result.sort() // 결과값 정렬
}

한 줄 평

  • result 배열을 복사한 copy 배열 선언하여 계산하는 것 포인트!
profile
oneThing

0개의 댓글