문제 설명
생략
🙋♂️나의 풀이
🤔문제 접근
- 주어진 문자열에서 원소를 감싸고 있는 부분 집합들을 뽑아낸다.
- 예를 들어
{{1}, {1,2,3}, {1,2}}
이 있다면{1}
,{1,2,3}
,{1,2}
과 같이 분리한다.
- 예를 들어
- 원소의 길이가 적은 순서대로 튜플이 구성되므로 문자열의 길이가 작은 순서대로 집합을 정렬한다.
{1}
,{1,2}
,{1,2,3}
순서대로 집합을 정렬한다.
- 정렬한 순서대로 집합들을 순회하며 원소가 중복되지 않도록 stack에 넣는다.
✍️작성 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function solution(s) {
const stack = [];
const regex = /[{w+}]/g;
const groups = s.split(regex).filter(is_dilimiter).sort(sort_by_length);
groups.forEach((group) => {
const elements = group.split(",");
elements.forEach((elem) => {
if (!stack.includes(+elem)) stack.push(+elem);
});
});
return stack;
}
const is_dilimiter = (char) => {
if (char === "" || char === ",") return false;
return true;
};
const sort_by_length = (a, b) => {
return a.length - b.length;
};
정규 표현식을 사용해서 중괄호를 제거한다.
1 2
const regex = /[{w+}]/g; const groups = s.split(regex);
1 2 3 4 5 6 7 8 9 10
입력 문자열 : "{{1,2,3},{2,1},{1,2,4,3},{2}}" [ '', '', '1,2,3', ',', '2,1', ',', '1,2,4,3', ',', '2', '', '' ]
빈 문자열과 콤마를 제거한다.
1 2 3 4 5 6
const groups = s.split(regex).filter(is_dilimiter); const is_dilimiter = (char) => { if (char === "" || char === ",") return false; return true; };
1
[ '1,2,3', '2,1', '1,2,4,3', '2' ]
문자열의 길이가 작은 순서대로 오름차순 정렬한다.
1 2 3 4 5
const groups = s.split(regex).filter(is_dilimiter).sort(sort_by_length); const sort_by_length = (a, b) => { return a.length - b.length; };
1
[ '2', '2,1', '1,2,3', '1,2,4,3' ]
각 집합을 순회하며 중복되는 수를 제외하고 stack에 순서대로 넣는다.
1 2 3 4 5 6
groups.forEach((group) => { const elements = group.split(","); elements.forEach((elem) => { if (!stack.includes(+elem)) stack.push(+elem); }); });
1
[2, 1, 3, 4]