[알고리즘] 프로그래머스 - 크레인 인형뽑기 게임

do_large·2021년 1월 6일
0

알고리즘

목록 보기
31/50
post-thumbnail

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

문제설명
게임 화면의 격자의 상태가 담긴 2차원 배열 board와 인형을 집기 위해 크레인을 작동시킨 위치가 담긴 배열 moves가 매개변수로 주어질 때, 크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return 하도록 solution 함수를 완성해주세요.

이 문제는 작동하는 그림을 봐야 이해가 되므로 저 링크로 들어가서 문제를 한번 읽어보기 바랍니다.

제한사항

  • board 배열은 2차원 배열로 크기는 5 x 5 이상 30 x 30 이하입니다.
  • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
  • 0은 빈 칸을 나타냅니다.
  • 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
  • moves 배열의 크기는 1 이상 1,000 이하입니다.
  • moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.

입출력 예

해결방법
코드에 적어두겠음

function solution(board, moves) {
    let stack =[]; // 크레인으로 옮긴 인형을 담을 stack
    let count=0; // 터트려진 인형 개수를 담을 변수
  
 
  //외부 for문은 moves의 순서대로 작동해야하기때문에 moves의 길이만큼 순회함
    for(let i = 0; i < moves.length; i++){
      // 각 i에 대해 board에서 값을 찾아준다
        for(let j = 0; j < board.length; j++){
          // 탐색 대상이 되는 column에 인형이 있는지 확인
            if(board[j][moves[i]-1]){ 
              // 스택의 끝 값과 스택에 새로 넣을 값이 같을때는 두개 모두 터트리기
                if(stack.length && stack[stack.length-1]===board[j][moves[i]-1]){
                    stack.pop();
                    count+=2;
                }else{
                  //새로넣을값과 스택의 끝 값이 같지않으면 스택에 값 넣어주기
                    stack.push(board[j][moves[i]-1]);    
                }
                board[j][moves[i]-1] = 0;
                break;
            }
        }
    }
    return count;
}

0개의 댓글