[프로그래머스] 크레인 인형뽑기게임 | Javascript

문제

카카오 크레인 인형뽑기게임

1. 첫 번째 시도

최대한 가독성을 위해 함수를 분리하고 직관적인 변수명을 지으려고 노력했다.

  1. getDoll이라는 보조함수를 만들어서 보드와 컬럼을 지정해주면 해당 위치에 있는 인형을 반환하게 해 주었다.
  2. getDoll에서 받은 인형이 버켓의 마지막 인형과 같다면 버켓에서 pop, popCount는 +1씩,
  3. 같지 않다면 버켓에 해당 인형을 집어넣는다.
  4. pop된 인형의 개수는 popCount * 2으로 리턴한다.
function solution(board, moves) {
    var popCount = 0;
    let playBoard = board.slice();
    let bucket = [];
    
    for (let move of moves) {
        let doll = getDoll(playBoard, move - 1);
        let lastDoll = bucket[bucket.length - 1];
        if (doll) {
            if (doll === lastDoll) {
                bucket.pop();
                popCount++; 
            } else {
                 bucket.push(doll);
            }
        }
    }
    
    return popCount * 2;
}

function getDoll(board, col) {
    let doll = 0;
    for (let row of board) {
        doll = row[col];
        if (doll) {
            row[col] = 0;
            return doll;
        }
    }
    return doll;
}

2. 두 번째 시도

첫 번째 시도를 하고 나서 다른 블로그 글을 보니 신기한 방식으로 하는 분이 계셔서 코드를 보지는 않았고 컨셉만 가지고 직접 구현해보기로 했다. 어떻게 이런 생각을 하셨지.

  1. 결국 column 기준으로 인형을 뽑으므로 row 기준의 배열을 column으로 재정의한다.
  2. moves의 각 move에 해당하는 row의 값을 shift한다.
  3. 버켓에 넣는 로직은 첫 번째 코드와 같다.

(to be continue..)

참고 블로그 : HongdaeDev.log님의 블로그

좋은 웹페이지 즐겨찾기