[프로그래머스] Level 1 - 크레인 게임

SeungMin·2022년 9월 10일
0

Algorithm

목록 보기
3/3

문제 설명




제한 사항


입출력 예제


풀이 과정

먼저 주어진 board 2중배열의 경우를 해석해봤다.


위와 같은 형태를 띈다.

board[0][0] 원소의 위치는 가장 왼쪽 위가 되는 것.
이해한 바를 바탕으로 풀이를 시작했다.

function solution(board, moves) {
    
    let stack = [];
    let answer = 0;
    
  
  	// 크레인이 움직인 곳에 0이 아닌(인형이 있다면) 숫자가 있다면
  	// 해당 숫자를 뽑은 숫자 배열인 stack에 push하고 0으로 대치한다.
  	// 한번이라도 뽑았다면 그 아래의 인형은 뽑을 수 없기때문에 break로 빠져나온다.
    moves.forEach((el) => {
            for(let j = 0; j < board.length; j++){
                if(board[j][el-1] != 0){
                    stack.push(board[j][el-1]);
                    board[j][el-1] = 0;
                    break;
                }
            }        
    })
    
  	// 뽑기가 모두 끝나고 쌓인 인형 배열에서 연속으로 같은 값이 나오면
  	// 문제 조건에서 언급한대로 배열에서 두 원소를 지운다.
  	// 원소가 사라지고 재배열된 인형을 처음부터 다시 탐색한다.
  	// 위의 과정을 거치며 중복되는 인형 없이 순회가 끝나면
  	// 해당 과정에서 지워진 인형의 총 갯수를 반환한다.
    for(let k = 0; k < stack.length; k++){
        if(stack[0] == stack[1]){
            stack.shift();
            stack.shift();
            answer += 2;
            } else 
        if(stack[k] == stack[k+1]){
                stack.splice(k,2);
                answer += 2;
                k = 0;
            }
        }
    return answer;
}
profile
공부기록

0개의 댓글