[Lv.1] 크레인 인형뽑기 게임

01수정·2023년 11월 16일
0

문제

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





풀이

  • 1차 풀이. 일단 답이 나오게 무식하게 풀기
  1. move 를 순회하며 (0, move-1), (1, move-1), (2, move-1), ... (board의 높이, move-1) 에서 첫 번째 인형만 뽑아낸다. 인형 한 개만 뽑아내기 위해 뽑아낸 후 flag 값 설정. 인형을 basket 에 넣고 board 에선 삭제
  2. move 를 순회하며 인형을 집어넣은 이후에는 항상 basket 을 검사한다.
    (이 때, 인형이 2개 이상 들어있을 경우에만 검사한다! 1개 있을때 마지막 인형(slice(-1)) 과 마지막에서 두 번째 인형 (slice(-2)) 모두 마지막 인형을 가리키기 때문)
function solution(board, moves) {
    let height = board.length;
    let basket = [];
    let answer = 0;
    
    moves.forEach((line, idx) => {
        let flag = true;
        for (let i=0; i<height; i++) {
            if (board[i][line-1] !== 0 && flag) {
                basket.push(board[i][line-1]);
                board[i][line-1] = 0;
                flag = false;
            }
        }

        if (basket.length >= 2) {
            if (basket.slice(-1)[0] === basket.slice(-2)[0]) {
                basket.pop();
                basket.pop();
                answer += 2;
            }
        }
    })

    return answer;
}

다른 풀이

const transpose = matrix =>
    matrix.reduce(
        (result, row) => row.map((_, i) => [...(result[i] || []), row[i]]),
        []
    );

const solution = (board, moves) => {
    const stacks = transpose(board).map(row =>
        row.reverse().filter(el => el !== 0)
    );
    const basket = [];
    let result = 0;

    for (const move of moves) {
        const pop = stacks[move - 1].pop();
        if (!pop) continue;
        if (pop === basket[basket.length - 1]) {
            basket.pop();
            result += 2;
            continue;
        }
        basket.push(pop);
    }

    return result;
};
function solution(board, moves) {

    var count =0;
    var stack = [];

    for(var i=0;i<moves.length;i++){
        var now = moves[i]-1
        for(var j=0;j<board.length;j++){
            if(board[j][now]!=0){
                if(stack[stack.length-1]===board[j][now]){
                    stack.pop();
                    count+=2;
                }
                else{
                    stack.push(board[j][now])
                }
                board[j][now] = 0;
                break;
            }
        }
    }
    console.log(stack)
    return count
}
function solution(board, moves) {
    var answer = 0;
    var arr = []
    for(var i = 0; i < moves.length; i++){
        for(var j = 0; j < board.length;j++){
            if(board[j][moves[i]-1] !== 0){
                arr.push(board[j][moves[i]-1])
                board[j][moves[i]-1] = 0
                break;
            }
        }
        if (arr.length >=2){
            if (arr[arr.length-1] === arr[arr.length-2]){
                answer +=2
                arr.splice(arr.length-2,2)

            }
        } 
    }
    return answer;
}
profile
새싹 FE 개발자

0개의 댓글