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

devmin24·2021년 7월 15일
0

⏳ 도전! 알고리즘

목록 보기
14/32


예전에 파이썬으로만 알고리즘 문제를 풀어왔는데, 앞으로 자바스크립트로 풀어볼 생각이다. 먼저 풀었던 문제들을 자바스크립트로 다시 풀어본다.

문제 링크

유명한 카카오 문제이다.
뽑은 인형이 중복되면 사라지며, 사라진 인형의 갯수를 구하는 문제이다.
이차원 배열과 스택을 이용하여 풀면 된다.

스택이란?
스택은 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 자료구조이다. 항아리를 생각해보면 쉽게 이해할 수 있다.

스택의 연산에서는 pop(), push()를 사용하면 된다.

  • pop() : 배열의 가장 마지막 항목을 제거한다.
  • push() : 배열의 가장 마지막에 항목을 추가한다.

나는 이번 문제에 위의 2가지를 사용해 풀어볼 예정이다.

풀이

  1. 크레인은 상, 하로 움직이기 때문에 board[j][i]로 인덱스 값을 거꾸로 사용한다.
  2. 인형이 있으면 뽑은 후 0으로 바꿔주어 빈 곳이라는 표시를 해준다.
  3. 인형을 뽑은 후 반복되지 않도록 break를 걸어준다.
  4. 뽑은 인형과 바구니에 담긴 상단의 인형이 같다면(중복) 사라진다.

코드

function solution(board, moves) {
    let bascket = [];
    let answer = 0;
    for(let i = 0; i < moves.length; i++) {
        const move = moves[i] - 1; // 인덱스 값을 사용하기 위해 -1 해준다.
        for(let j = 0; j < board.length; j++) {
            const doll = board[j][move];
                if(doll) {
                    board[j][move] = 0; // 인형이 있으면 뽑고난 후 0으로 처리해 빈 곳을 표시해준다.
                    if(bascket.length !== 0 && bascket[bascket.length-1] === doll) {
                      //바구니에 인형이 있을 때, 바구니에 담긴 인형과 뽑은 인형이 같을 경우
                        bascket.pop();
                        answer += 2; // 인형은 사라지며 사라진 인형은 2개가 된다.
                    } else {
                        bascket.push(doll); // 인형이 서로 다를 경우, 바구니에 뽑은 인형을 넣어준다.
                    }
                    break;
                };
            };
    }
    return answer;
}

참고한 블로그

Takeaway

파이썬으로 풀다 자바스크립트로 풀어보니, 조금 더 복잡?한 것 같지만 재미는 더 있다!
이차원 배열과 스택만을 사용하여 인형뽑기 게임을 구현할 수 있다는 게 새롭고 신기했다.
어려울 거라고만 생각한 나 자신을 반성하며, 어려워 보여도 쉽게 풀 수 있는 문제들이 많다는 것을 느끼게 되는 문제였다.
무엇보다 이렇게 재밌는 문제를 만들어 제출한 분에게 존경의 박수를 보내며...

profile
꾸준함, 열정 한 가득 챙겨 끝없는 목표를 향해 달려가는 개발자👩‍💻

0개의 댓글