프로그래머스 - [Level 2] 튜플(JAVASCRIPT)
카테고리 : 문자열
풀이과정은 다음과 같다.
1) 문자열 파싱
문제에 주어진 조건에 맞게 문자열을 2차원 배열로 파싱해준다.
{ {2},{2,1},{2,1,3},{2,1,3,4}}
=>
[[2],[2,1],[2,1,3],[2,1,3,4]]
2) 배열 정렬
배열을 크기에 대하여 오름차순으로 정렬한다.
[[3,1],[3],[3,1,2]]
=>
[[3],[3,1],[3,1,2]]
3) 배열을 순차적으로 탐색하면서
visit check 되지 않은 원소부터 answer에 삽입해준다.
[3] => visit[3] = true , answer.push(3)
[3,1] => visit[3]===true continue;
visit[1] = true , answer.push(1)
[3,1,2] => visit[3]===true, visit[1]===true continue;
visit[2] = true , answer.push(2);
소스 코드
function solution(s) {
const answer = [];
const visit=[];
let parsedArr=[];
function parse(s){
const tmp=[];
const a=s.split("},");
for(let i of a){
let arr=[];
i=i.split('{').join('');
i=i.split('}').join('');
let a=i.split(',');
for(let j=0;j<a.length;j++){
arr.push(a[j]);
}
tmp.push(arr);
}
tmp.sort((i,j)=>{
return i.length-j.length;
});
return tmp;
}
function makeAnswer(arr){
for(let i of arr){
for(let j=0;j<i.length;j++){
if(!visit[i[j]]) answer.push(i[j]*1);
visit[i[j]]=1;
}
}
}
parsedArr=parse(s);
makeAnswer(parsedArr);
return answer;
}
다른 사람의 코드
함수형으로 코드를 짜면 간결해진다.
function solution(s) {
/**
문자열 파싱 => g를 쓰면 모든 문자열을 replace 해준다.
중괄호를 전부 대괄호로 바꿔준다.
**/
return JSON.parse(s.replace(/{/g, '[').replace(/}/g, ']'))
/**
길이 오름차순으로 정렬한다.
**/
.sort((a, b) => a.length - b.length)
// accumulator, currentvalue, index
.reduce((arr, v, n) => {
if (n) {
// concat : 여러개의 문자열로 결합, arr 배열에 포함된 원소는 걸러준다.
return arr.concat(v.filter(f => !arr.includes(f)));
}
return v;
}, []); // 배열로 만들어주기
}
Leave a comment