// 1. 주어진 튜플 문자열을 배열로 변경
==>
다음엔 JSON.parse(s.replace(/{/g, '[').replace(/}/g, ']'))
써보기..
// 2. sort를 통해 길이에 따른 오름차순 정렬
// 3. str 배열을 순회하면서 answer에 있으면 스킵하고 없으면 넘기도록 하면 정렬한 순서대로 담기므로 정답을 도출할 수 있다.
==>
다음엔 reduce, concat, filter, includes
로 풀어보기
function solution(s) {
let str=[];
let tmp=[];
let ps=false;
for (let i=0; i<s.length; i++) {
if (!isNaN(s[i])) ps=true;
if (s[i]=='}') {
ps=false;
if (tmp.length > 0) { str.push(tmp.slice()); }
tmp.length=0;
}
if (ps==true) tmp.push(s[i]);
}
for (let i=0; i<str.length; i++) str[i]=str[i].join('').split(',');
str.sort((a,b) => a.length - b.length);
let answer = [];
for (let i=0; i<str.length; i++) {
for (let j=0; j<str[i].length; j++) {
str[i][j] = Number(str[i][j]);
if (!answer.includes(str[i][j])) {
answer.push(str[i][j]);
}
}
}
return answer;
}
console.log(solution("{{20,111},{111}}"))
// console.log(solution("{{2},{2,1},{2,1,3},{2,1,3,4}}"))
parse의 첫번째 인자로 {}를 잡아내는 정규표현식,
두번째 인자로 {이면 [, }이면 ]로 바꾸는 replacer 함수를 콜백으로 넘겨주는 식으로 바꾸면 좋은 풀이라고 한다....
filter로 포함되지 않는 숫자들만 남겨서 concat으로 계속 배열을 합치다 보면 정답 배열이 도출된다.
function solution(s) {
return JSON.parse(s.replace(/{/g, '[').replace(/}/g, ']'))
.sort((a, b) => a.length - b.length)
.reduce((arr, v, n) => {
if (n) {
return arr.concat(v.filter(f => !arr.includes(f)));
}
return v;
}, []);
}
str.slice(2,-2).split('},{') 가 인상적이다.
const tupleFrom = (str) =>
str.slice(2, -2).split('},{')
.map((it) => toNumbers(it))
.sort(accendingByLength)
.reduce((acc, cur) =>
[...acc, ...cur.filter((it) => !acc.includes(it))], []);
const toNumbers = (str) => str.split(',').map(it => Number(it));
const accendingByLength = (arr1, arr2) => arr1.length - arr2.length;
const solution = (s) => tupleFrom(s);
console.log(solution("{{20,111},{111}}"))
// console.log(solution("{{2},{2,1},{2,1,3},{2,1,3,4}}"))
Set을 활용한 풀이
function solution(s) {
let answer = [];
let newArr = JSON.parse(s.replace(/{/g,'[').replace(/}/g,']'));
newArr.sort((a, b) => {return a.length - b.length});
let temp = [];
for(let i = 0; i < newArr.length; i++) {
for(let j = 0; j < newArr[i].length; j++) {
temp.push(newArr[i][j]);
}
}
answer = [...new Set(temp)];
return answer;
}