입력된 String에 대해서 모든 부분 집합을 찾는 코드이다.
여기서 Set을 썻는데 중복값 제거를 위해 사용했다.
- 한자만 들어올 경우 들어온 한자만 Set에 담아서 return 한다.
- 한자 이상일 경우 현재 값을 중심으로, 하기 3가지를 담는다.
- 현재 값
- 들어온 값 전체
- 현재 값 + 들어온 값 전체
- 담겨진 모든 값을 돌려준다.
예를 들자면 'ab' 2자가 들어왔을 경우
최초 현재 값은 a이고 나머지 값은 b가 된다. b는 한자임으로 즉각 리턴이 되고,
현재값 a 그리고 즉각 리턴된 b를 set에 담는다.
그리고 현재값 a와 합산값 b를 합해서 set에 담음으로써
['a','b','ab']가 된다.
만약 'c'를 추가로 'cab'라고 하면
현재값 c와 상기 ['a','b','ab']를 더해서 추가 한다.
['a','b','ab', 'c', 'ca','cb','cab'] 가 되게 된다.
갯수는 2^3 - 1임으로 7개가 맞다.
단, 중복값 'aa' 가 들어올 경우 상기 갯수는 틀리게 된다.
function permutation(str) {
let set = new Set();
if (str.length == 1) {
set.add(str);
return set;
}
let cur = str.substring(0, 1);
let nextList = permutation(str.substring(1));
set.add(cur);
for (let next of nextList) {
set.add(next);
set.add(cur + next);
}
return set;
}
let input = "abcdefghij";
let result = permutation(input);
console.log(result.size == Math.pow(2,input.length)-1);
728x90
반응형
'Problem Solving' 카테고리의 다른 글
Javascript Priority Queue 오름 차순 (0) | 2020.09.14 |
---|---|
Hyper V Ubuntu safe mode (grub & cd boot & gparted) (0) | 2020.09.13 |
1022. Sum of Root To Leaf Binary Numbers (0) | 2020.09.08 |
157. Read N Characters Given Read4 (0) | 2020.09.08 |
Shortest path in a Binary Maze (0) | 2020.09.08 |