크레인 인형뽑기 게임 - 2019 카카오 겨울 인턴십 코딩테스트 문제 풀이

Jake Seo·2020년 6월 9일
0

js-leet-code

목록 보기
8/9
post-thumbnail

문제 및 풀이

아침에 심심해서 풀어본 문제!

빠르게 푸느라 코드는 이상할 수도 있다.

문제는 여기에서 볼 수 있다.

이 문제를 푼 과정은

먼저, board 배열이 가로 1줄을 기준으로 설정되어 있기 때문에, 생각하기 쉽게 행렬을 transpose했다. 그러면 세로로 1줄을 기준으로 하여 각각의 줄을 하나의 스택처럼 볼 수 있다. 그 후에 인형을 뽑고 뽑혀진 인형 중에 같은 인형이 있으면 +2점을 하고 그 두 인형을 없애버리는 것이다.

function solution(board, moves) {
    let board2 = board2Init(board);
    
    return pickDolls(board2, moves);
}

function board2Init(board) {
    let board2 = [];
    for(let i=0; i<board[0].length; i++){ board2.push([])};

    for(let i=0; i<board.length; i++){
        for(let j=0; j<board[i].length; j++) {
            if(board[i][j] !== 0){
                board2[j].push(board[i][j]);
            }
        }
    }

    return board2;
}

function pickDolls(board2, moves) {
    // 정답
    let answer = 0;

    // 뽑아져서 대기중인 인형들
    let pickedDolls = [];
    
    // moves 배열만큼 인형 뽑기
    for(let i=0; i<moves.length; i++){
        // 배열은 0부터 시작, moves는 1부터 시작
        let pickedColumn = moves[i]-1;
        // 인형이 존재하면
        if(board2[pickedColumn].length > 0){
            // 인형 가져가기
            let pickedDoll = board2[pickedColumn].splice(0, 1)[0];
            
            // 인형이 이전 인형과 같은 인형인지 확인하기
            if(pickedDolls.length > 0 && pickedDolls[pickedDolls.length-1] === pickedDoll) {
                // 뽑혔던 인형 1개 사라짐
                pickedDolls.pop();
                // 맞으면 총 2개 사라짐
                answer = answer + 2;
            }
            else {
                // 틀리면 인형 쌓기
                pickedDolls.push(pickedDoll);
            }
        }
    }

    return answer;
};

깨달은점

  1. 생각이 복잡할 때는 프로세스별로 함수로 정리하며 풀기 (함수명 너무 대충 ㄴㄴ)
  2. 주석달며 풀기 ( 내 생각 주석으로 정리하며)
profile
풀스택 웹개발자로 일하고 있는 Jake Seo입니다. 주로 Jake Seo라는 닉네임을 많이 씁니다. 프론트엔드: Javascript, React 백엔드: Spring Framework에 관심이 있습니다.

0개의 댓글