본문 바로가기
개발/알고리즘

프로그래머스 : 크레인 인형 뽑기 (자바스크립트)

by 안뇽! 2021. 10. 29.
반응형

문제가 길다. 이 글을 읽는 사람들은 프로그래머스를 풀다가 직접 검색해서 온 사람들일것이니 따로 문제를 적진 않겠다.

 

전형적인 stack문제이다.

function solution(board, moves) {
    //각 칸에서 0보다 처음 커지는 자리를 0으로 바꾸고 
    //store[store.length-1]과 board[i][j]를 비교한다.
    //store의 마지막자리와 지금 store에 넣으려는 값(board[i][j])이 같다면 
    //store의 마지막 값을 pop하고
    //인형이 2개(넣으려는값+store의 마지막값)가 없어졌으니 result +=2 한다.
  
    let store = [];//stack역할함
    let result = 0
    
    moves.forEach(move=>{
        for(let i = 0;i<board.length;i++){//크레인의 위치
            if(board[i][move-1]>0){//인형이 있다면
                let tmp = board[i][move-1]//인형의 값을 tmp에 할당
                if(store[store.length-1]===tmp){//tmp와 store의 마지막 인형값이 같다면
                    store.pop();//마지막 인형을 없애고(tmp값도 사라지는데 더했다 지울것이라 생략)
                    result += 2;//터뜨린인형2개 추가
                }else{
                	//store마지막값이 tmp와 다르면 그냥 store에 넣는다.
                    store.push(tmp)
                }
                
                //인형 뺐으니까 0으로 바꿔주고
                board[i][move-1]=0
                //다음칸으로
                break;
            }    
        }
    })
    return result//터뜨린 인형 개수
}
반응형