하나의 집합을 의미하는 문자열을 입력받아 각 문자를 가지고 만들 수 있는 모든 부분 집합을 리턴
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: 여기에 코드를 작성합니다.
let arr = str.split('').sort(); //문자열을 분리해서 배열로 만들어주고 정렬해준다.
let result = [''] //결과가 담길 배열
let aux = (target, result) => { //result에서 target을 추가한 인자들을 result에 추가해주는 함수
let copy = result.slice();
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의 값들을 전부 넣어서 aux함수 실행
if(!result.includes(arr[i])){ //중복값이 아닌 경우에만 실시
aux(arr[i], result)
}
}
return result.sort(); //결과를 정렬해서 반환
};
위 주석을 읽으면서 내려오면 코드가 이해될 것이다.
'컴퓨터과학로드맵' 책을 통해서 보다 확실하게 멱집합의 개념을 이해하고 보다 간편하게 코드를 구현할 수 있게 된 것 같다. 물론 구현과정에서 몇몇 실수는 있었지만 충분히 문제점을 파악하고 해결할 수 있었다.