알고리즘 문제 풀기

프로그래머스: 크레인 인형뽑기 게임 - javascript (구현)

Fo_rdang 2024. 4. 4. 10:40
반응형

문제 출처 

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 풀이 힌트 

01. moves를 반복문으로 돈다.  근데 그 때의 값에서 -1을 값이 board에서의 줄이다.
02. board[i][몇번째 줄] !== 0 일 때가 뽑아야 하는 인형이다.
03. 뽑은 인형이, 바구니의 맨 끝 숫자랑 같은지 확인하고 
   - 같다면 바구니의 맨 끝 인형 빼주고, cnt+=2 
   - 같지 않다면 바구니에 뽑은 인형 그냥 쌓는다. 

문제 풀이 코드 

function solution(board, moves) {
    let bakuni = []; //바구니 
    let cnt = 0; 
   function check(num){ // 선택한 줄에서 인형 뽑는 함수  
       for(let i=0; i<board.length; i++){
            if(board[i][num] !== 0){ //인형을 발견할 때 
                    if(bakuni[bakuni.length-1] !== board[i][num]){ //뽑은 인형 !==바구니 끝 인형  
                        bakuni.push(board[i][num]); //바구니에 뽑은 인형 넣기 
                        board[i][num] =0; //게임 뽑기에서 인형 뽑았으니 0으로 값 채우기 
                        return 0; 
                    }else{ //뽑은 인형 === 바구니 끝 인형 
                        bakuni.pop(); //바구니에 있던 마지막 인형 빼기 
                        board[i][num] =0; //게임 뽑기에서 인형 뽑았으니 0으로 값 채우기 
                        return 2; //인형 두개 없애기 
                    }
               }
       }
       return 0; //선택한 줄에 인형이 없을 때 
   }
    for(let i=0; i<moves.length; i++){
      cnt += check(moves[i]-1)
   } 
    return cnt; 
}

Only 풀이 코드 

function solution(board, moves) {
    let bakuni = []; 
    let cnt = 0; 
   function check(num){
       for(let i=0; i<board.length; i++){
            if(board[i][num] !== 0){
                    if(bakuni[bakuni.length-1] !== board[i][num]){ 
                        bakuni.push(board[i][num]);
                        board[i][num] =0; 
                        return 0; 
                    }else{ 
                        bakuni.pop(); 
                        board[i][num] =0; 
                        return 2; 
                    }
               }
       }
       return 0; 
   }
    for(let i=0; i<moves.length; i++){
      cnt += check(moves[i]-1)
   } 
    return cnt; 
}

 

 

 

반응형