알고리즘 문제풀이-크레인 인형뽑기 게임

공부중인 개발자·2021년 9월 2일
0

알고리즘

목록 보기
2/63
post-thumbnail

https://programmers.co.kr/learn/courses/30/lessons/64061?language=javascript

크레인이 작동하여 인형을 뽑고 같은 모형의 인형 2개를 동시에 뽑았다면 return 값에 2를 더해주는 내용의 문제

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

입출력 예

boardmovesresult
[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]][1,5,3,5,1,2,1,4]4

풀이법

function solution(board, moves) {
  var answer = 0;
  let stacks = [];
  for (let i = 0; i < moves.length; i++) {
    for (let j = 0; j < board.length; j++) {
      if (board[j][moves[i] - 1]) {
        if (stacks[stacks.length - 1] === board[j][moves[i] - 1]) {
          stacks.pop();
          answer += 2;
        } else {
          stacks.push(board[j][moves[i] - 1]);
        }
        board[j][moves[i] - 1] = 0;
        break;
      }
    }
  }
  return answer;
}

무브를 반복 돌리면서 라인에 대해서 보드를 밑으로 내리고 0이 아닐 경우 스택에 넣어주는데 스택에 마지막 요소가 넣어주는 값과 같다면 마지막 요소를 빼주고 정답+2 를 더해준다. 그리고 아닌경우는 스택에 넣어준다. 마지막으로 뽑은 인형자리를 0으로 만들어 준뒤 break를 통해 반복문을 빠져나온다. 그렇지 않으면 계속 같은곳의 인형을 뽑기 때문에.

profile
열심히 공부하자

0개의 댓글