본문 바로가기

알고리즘 문제풀이

[프로그래머스] 2019카카오 겨울 인턴십 - 크레인 인형뽑기 / 튜플

오늘 푼 문제

 

1. 크레인 인형뽑기 게임 / Lv.1 / 시간 : 12분

programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

function solution(board, moves) {
    var answer = 0;
    let n = board.length;
    let stack = [];
    let newArr = board.reduce((acc,cur)=>{
        cur.forEach((v,i)=>{
            if(v) acc[i].push(v)
        })
        return acc;
    },Array.from(new Array(n),()=>new Array()));
    
    moves.forEach(i=>{
        if(newArr[i-1].length) {
            let target = newArr[i-1].shift();
            if(stack[stack.length-1]==target){
                stack.pop();
                answer++;
            }else{
                stack.push(target);
            }
        }
    })

    return answer*2;
}

 

 

2. 튜플 / Lv.2 / 시간 : 38분

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

1차 - 일단 arr을 중복되는 것 까지 다 concat 한 뒤 최종 arr을 set으로 중복제거함

function solution(s) {
    var answer = [];
    let arr  = JSON.parse(s.replace(/{/g,"[").replace(/}/g,"]"))
    .sort((a,b)=>a.length-b.length)
    .reduce((acc,cur)=>{
        acc = acc.concat(cur);
        return acc;
    },[]);
        
    answer = [...new Set(arr)];
    
    return answer;
}

 

통과는 했지만 속도가 느림

 

 

2차- 매번 더할 때 마다 set을 생성해 중복제거를 시켜줌

function solution(s) {
    var answer = [];
    let arr  = JSON.parse(s.replace(/{/g,"[").replace(/}/g,"]"))
    .sort((a,b)=>a.length-b.length)
    .reduce((acc,cur)=>{
        acc = [...new Set([...acc,...cur])];
        return acc;
    },[]);
    answer = arr;        
    
    return answer;
}

 

결과 : 매번 set을 생성함에도 성능적으로 속도가 확연히 줄었다.