알고리즘 크레인 인형뽑기

.·2021년 7월 5일
function solution(board, moves) {
  var answer = 0;
  const length = board.length;
  const stack = [];
    
  moves.forEach((move) => {     
    for (let i = 0; i < length; i++) {
      const target = board[i][move - 1];
      if (target) {
        if (target === stack[stack.length - 1]) {
          stack.pop();
          answer += 2;
        } else stack.push(target);

        board[i][move - 1] = 0;
        break;
      }

    }
  });
  return answer;
}

배열안의 배열의 접근법과 pop을 활용하는게 핵심인 것 같다
1. 뽑힌 인형을 담을 stack을 만든다
2. moves배열의 element하나하나당 for문을 돌아야 하는데 0번부터 n번전까지 돌아야한다(nxn 격자 주어졌을때)

  • 집게가 위에서부터 접근하니 0번부터 시작해야한다
  1. 제일 처음발견되는 인형을 target으로 설정하고 target이 없으면 그냥 지나가도록 한다
  • target=board[i][move-1]인 이유는 번째수를 index로 바꾸면 -1해줘야하고, move-1은 고정시켜주고 i만 바꾸면서 확인해야한다
  1. target이 stack에 있는 마지막인형과 일치하면 마지막인형 제거해주고 점수에 +2를 추가해준다
  2. 일치하지 않으면 stack에 target을 넣어준다
  3. target을 격자에서 제거해준다(board[i][move-1]=0)
  4. 중요한점은 target이 있으면(0이아니면) 4-5번을 해준뒤 break;해서
    더이상 for문이 돌지 못하도록 해야한다
profile
Divde & Conquer

0개의 댓글