티스토리 뷰

코딩테스트

프로그래머스 1단계 답지2

안양사람 2020. 12. 27. 01:18
728x90
SMALL

크레인 인형뽑기 게임(2019 카카오 개발자 겨울 인턴십)

function solution(board, moves) {
    let arr=[];
    let count=0;
    for(let i=0;i<moves.length;i++){
        for(let j=0;j<board.length;j++){
            if(board[j][moves[i]-1]){
                arr.push(board[j][moves[i]-1]);
                board[j].splice(moves[i]-1,1,0);
                if(arr[arr.length-1]===arr[arr.length-2]){
                    arr.splice(arr.length-2);
                    count+=2;
                }
                break;
            }
        }
    }
    
    return count;
}

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

 

두 개 뽑아서 더하기

function solution(numbers) {
    let arr=[];
    for(let i=0;i<numbers.length;i++){
        for(let j=i+1;j<numbers.length;j++){
            arr.push(numbers[i]+numbers[j]);
        }
    }
    return [...new Set(arr)].sort((a,b)=>a-b);
}

programmers.co.kr/learn/courses/30/lessons/68644?language=javascript

 

3진법 뒤집기

function solution(n) {
    return parseInt(n.toString(3).split('').reverse().join(''),3);
}

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

 

내적

function solution(a, b) {
    return a.reduce((acc,cur,idx) => acc+=a[idx]*b[idx],0);
}

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

 

키패드 누르기(2020 카카오 인턴쉽)

function solution(numbers, hand) {
    let pos={
        1:[0,0], 2:[0,1], 3:[0,2],
        4:[1,0], 5:[1,1], 6:[1,2],
        7:[2,0], 8:[2,1], 9:[2,2],
        "*":[3,0], 0:[3,1], "#":[3,2]
    }
    let l=pos["*"], r=pos["#"];
    hand = hand==="left" ? "L" : "R";
    return numbers.map(num=>{
        let pos_num=pos[num];
        if([1,4,7].includes(num)){
            return lClick();   
        }else if([3,6,9].includes(num)){
            return rClick();
        }else{
            return chooseHand(l,r,pos_num,hand)==="L" ? lClick() : rClick();
        }
        function lClick(){
            l=pos_num;
            return "L";
        }
        function rClick(){
            r=pos_num;
            return "R";
        }
    }).join('');
}

function chooseHand(l,r,pos_num,hand){
    const lDis=Math.abs(l[0]-pos_num[0])+Math.abs(l[1]-pos_num[1]);
    const rDis=Math.abs(r[0]-pos_num[0])+Math.abs(r[1]-pos_num[1]);
    return lDis===rDis ? hand : lDis<rDis ? "L" : "R";
}

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

 

예산

function solution(d, budget) {
    let result=0;
    d.sort((a,b)=>a-b);
    while(d[0]<=budget){
        budget-=d.shift();
        result++;
    }
    return result;
}

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

 

[1차] 비밀지도(2018 KAKAO BLIND RECRUITMENT)

function solution(n, arr1, arr2) {
    return arr1.map((val,idx) => 
                    ('0'.repeat(n)+(val | arr2[idx]).toString(2)).slice(-n)
                    .replace(/1/g,"#").replace(/0/g," "));
}

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

 

 

실패율(2019 KAKAO BLIND RECRUITMENT)

전에

function solution(N, stages) {
    let arrival_not_clear, arrival;
    let arr=[];
    for(let i=0;i<N;i++){
        arrival_not_clear=0;
        arrival=0;
        for(let j=0;j<stages.length;j++){
            if(i+1<=stages[j]){
                arrival++;
            }
            if(i+1===stages[j]){
                arrival_not_clear++;
            }
        }
        arr.push(arrival_not_clear/arrival);
    }
    arr=arr.map((percent,index)=>(
         {index:index+1,percent}
    ));
    arr.sort(comparePercent);
    let ans=[];
    for(let i=0;i<N;i++){
        ans.push(arr[i].index);
    }
    return ans;
    function comparePercent(a, b){
        if(a.percent>b.percent) return -1;
        else if(a.percent<b.percent) return 1;
        else return a.index-b.index;
    }
}

실패

function solution(N, stages) {
    stages.sort((a,b)=>a-b);
    let fail=0, index=0, percent;
    let arr=[];
    while(stages.length!==0 && index+1!==stages.length){
        fail++;
        if(stages[index]!=stages[index+1]){
            percent=fail/stages.length;
            arr.push({index:stages[index],percent})
            stages.splice(0,fail);
            index=0, fail=0;
        }else if(stages[index]===stages[stages.length-1]){
            percent=index+stages.length/stages.length;
            arr.push({index:stages[index],percent})
            break;
        }else{
            index++;
        }
    }
    
    arr.sort((a,b)=>b.percent-a.percent);
    let result=[];
    for(let i=0;i<arr.length;i++){
        result.push(arr[i].index);
    }
    let j=1;
    while(result.length!==N){
        if(result.indexOf(j)===-1) result.push(j);
        j++;
    }
    return result;
}

 

성공

function solution(N, stages) {
    let users=stages.length;
    let arr = Array(N).fill().map((val,idx) => [idx, 0]);
    
    stages.forEach(i=>{
        if(i>N) return false;
        arr[i-1][1]++;
    });
    
    return arr.map(x => {
        x.push(x[1]/users);
        users-=x[1];
        return x; 
    }).sort((a, b) => b[2]-a[2]).map(x => x[0]+1);
}

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

 

 

1차 다트게임(2018 KAKAO BLIND RECRUITMENT)  -- 정규식을 알긴하는데 여기서 못쓰겠다.. 

function solution(dartResult) {
    let arr=[];
    for(let i=0;i<dartResult.length;i++){
        if(dartResult.slice(i,i+2)=="10"){
            arr.push(10);
            i++;
        } else if(!isNaN(dartResult[i])){
            arr.push(dartResult[i]*1)
        } else if(dartResult[i]==="D"){
            arr.splice(arr.length-1,1,arr[arr.length-1]**2);
        } else if(dartResult[i]==="T"){
            arr.splice(arr.length-1,1,arr[arr.length-1]**3);
        } else if(dartResult[i]==="*"){
            if(arr.length===1){
                arr.splice(arr.length-1,1,arr[arr.length-1]*2);
            }else{
                arr.splice(arr.length-2,2,arr[arr.length-2]*2,arr[arr.length-1]*2);
            }
        } else if(dartResult[i]==="#"){
            arr.splice(arr.length-1,1,arr[arr.length-1]*-1); 
        }
    }
    return arr.reduce((acc,cur)=>acc+cur,0);
}

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

 

 

 

 

728x90
LIST
댓글
공지사항