1. 문제의 발단
- 요즘 보고 있는 알고리즘 문제들에 '부분집합'을 구하는 문제들이 많다. 매번 찾아보고 생각해서 쓰는 것보다 아예 외워버리듯이 적어버리면 편하지 않을까?라는 생각과 일단은 어떻게 모든 부분집합을 구할 수 있을까?라는 관점에서 포스팅을 하려고 한다.
2. 부분집합?
- 파란색 원은 밖의 원에 안에 있다. 이것이 바로 완전한 부분집합이 되는 것이다.
- 그러므로, 배열에서 '부분집합'을 말하면, 아래의 예시에서, arr안에 arrPartOne은 부분집합으로 모두 들어 있지만, arrPartTwo의 경우, 5가 없어서 부분집합이라고 할 수 없다.
let arr = [0, 1, 2, 3, 4]
let arrPartOne = [1, 0]
let arrPartTwo = [4, 5]
3. 그래서 어떻게 구할까?
- 재귀 함수를 이용한다.
let arr = [1, 2, 3]
let result = []
function everyComb(string, begin) {
result.push(string);
for(let i = begin; i < arr.length; i++) { // 반복문으로 시작점부터 arr의 요소 하나하나를 선택하고
everyComb(string + arr[i], i + 1); // 재귀함수의 인자로 하나씩 넣어서 시작점을 1씩늘린다.
}
}
everyComb('', 0);
console.log(result) // '', '1', '12', '123', '13', '2', '23', '3'
'Coding > Today I Learned' 카테고리의 다른 글
2021.08.06(Fri.) <너무 간단하게 알아보는 미들웨어 Express> (0) | 2021.08.07 |
---|---|
2021.08.04(Wen.) <서버 요청보내기 & CORS를 이겨먹는 법> (0) | 2021.08.04 |
2021.08.02(Mon.) <간단한 useEffect의 규칙> (0) | 2021.08.02 |
2021.08.01(Sun.) <트리구조를 여행하는 히치하이커들을 위한 안내서 > (0) | 2021.08.02 |
2021.07.31(Sat.) <효율적인 거듭제곱> (0) | 2021.08.01 |