프로그래머스 - [Level 2] 튜플(JAVASCRIPT)

1 minute read

프로그래머스 튜플 [KAKAO]

카테고리 : 문자열

풀이과정은 다음과 같다.

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