본문 바로가기

Web/Algorithm

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

 

1) 프로그래머스에 제출한 답.

function solution(board, moves) {
    let answer = 0;
    let bucket = [];

    for(let pos of moves){
        for(let x = 0; x < board.length; x++ ){
            if( board[x][pos-1] !== 0 ){
                if( bucket.length > 0 && bucket[bucket.length-1] ===  board[x][pos-1] ){
                    answer += 2
                    bucket.pop();
                }else{
                    bucket.push(board[x][pos-1]);
                }
                board[x][pos-1] = 0;
                break;
            }
        }
    }
    return answer
}

 

reduce로 객체 인덱싱하는 것처럼 어떻게 해보면 행,열 바꿀 수 있을 것 같다 싶었는데 생각대로 잘 안됐었다. 그래서 답 제출 후 찾아봤다.

const array = [[1,2,3,4],[5,4,8,6],[0,7,8,9]];
array.reduce((result, row) => row.map((_, i) => [...(result[i] || []), row[i]]),[]);

 

2) ,블로그 포스팅 하다가 수정해 본 코드

function solution(board, moves) {
    let answer = 0;
    let bucket = [];
    let newBoard = board.reduce((prev, now) => now.map( (val, i) => { if(!val) return;  return [ now[i],...(prev[i] || []) ]}  ),[]);

    for(let pos of moves){
        if( bucket[bucket.length-1] === newBoard[pos-1][newBoard[pos-1].length-1]){
            bucket.pop();
            newBoard[pos-1].pop();
            answer+=2;
        }else{
            bucket.push(newBoard[pos-1].pop());
        }
    }
    return answer
}

 

코드 길이 자체는 별반 차이가 없지만 불필요한 데이터를 모두 빼버리니 검색하기 더 좋지 않으까.

개인적으로 코딩테스트 통과하는 사람들은 진짜 대단한 것 같다. 알고리즘 풀이 실력보다도 쉬지않고 흘러가는 타이머를 보면서도 문제가 눈에 들어온다는게 진짜 ㅋㅋㅋ 신기할 따름이다.