개발 공부/알고리즘 문제 풀이

[프로그래머스] 튜플 (JavaScript)

종범2 2020. 6. 7. 12:19

문제

프로그래머스 2019 카카오 개발자 겨울 인턴십 튜플

https://programmers.co.kr/learn/courses/30/lessons/64065

 

코딩테스트 연습 - 튜플

"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]

programmers.co.kr

언어

바스크립트(JavaScript)

 

접근 방법

  1. input 문자열을 분리하여 배열의 배열의 형태로 변환한다.
  2. 크기 순으로 배열을 정렬한다.
  3. 첫 번째 배열의 요소를 answer에 저장한다.
  4. 다음 배열의 요소 중에 answer에 없는 요소를 찾고 answer에 저장한다.

코드

function solution(s) {
    var answer = [];
    // 문자열 분리
    // 맨 앞 {{, 맨 뒤 }} 삭제하고 },{ 기준으로 잘라 배열에 넣는다
    let strList = s.replace('{{','').replace('}}','').split('},{');
    let setList = [];
    for (let i=0; i<strList.length; i++){
        setList.push(strList[i].split(','));
    }
    // 크기 순으로 배열을 정렬
    setList.sort((a,b)=>{
        if (a.length>b.length){
            return 1;
        }else{
            return -1;
        }
    })
    // 첫 번째 요소 answer에 저장
    answer.push(parseInt(setList[0][0]));
    // 각 배열의 요소중에 answer에 없는 요소를 찾고 answer에 저장
    for (let i=1; i<setList.length; i++){
        let ele = getEle(setList[i],answer);
        answer.push(ele);
    }
    //console.log(answer,setList);
    return answer;
}
function getEle(set, answer){
    //set과 answer의 모든 요소를 배교해서 answer에 없는 set요소를 찾기
    for (let i=0; i<set.length; i++){
        for (let j=0; j<answer.length; j++){
            set = set.filter(ele=>ele!=answer[j]);
        }
    }
    return parseInt(set[0]);
}

복기

  1. 처음에 sort를 쓰지 않고 코드르 작성했는데, 정답은 나왔지만 코드가 복잡해졌다. sort를 써서 코드를 간결화했다.
  2. getEle 함수에서 filter를 쓰지 않고 코드를 작성했는데, 더 빠르긴 했지만 코드가 복잡해졌다. filter를 써서 코드르 간결화했다. 더 느려진다는 단점은 존재한다.