[TIL] 2019 카카오 개발자 겨울 인턴십

프로그래머스 코딩 테스트 연습

문제

  • https://programmers.co.kr/learn/courses/30/lessons/64061
  • 문제 요약
    • 인형뽑기 처럼 2차원 배열에서 뽑아서 스택 or ArrayList 에 쌓는다
    • 스택 or ArrayList에 같은 숫자가 오면 삭제 된다.
    • 총 삭제된 갯수 구하기

풀이

  1. moves가 어떤 숫자를 꺼내올지 결정 한다. -> moves를 순서대로 꺼내오기 (for , while , map )
  2. 꺼내 오면 (picked) 배열에 요소를 0 으로 바꿔주고 list 에 넣는다.
  3. list 의 크기가 0 보다 클때, 마지막 요소 (pickedList[pickedList.length -1 ]) 와 꺼내온 요소 (picked) 가 같다면 마지막요소를 없애고 (pop) 갯수를 +2 해준다.
  4. 같지 않다면 , 꺼내온 요소 (picked)를 넣는다. (push)
function solution(board, moves) {
    var answer = 0;
    let picked = 0;
    let pickedList = [];

    // moves!
    for (var i = 0 ; i < moves.length ; i++){
        // pick the num
        picked = 0;
        for (let j = 0 ; j < board.length ; j++){
            if ( board[j][moves[i]-1] > 0){
                picked = board[j][moves[i]-1];
                board[j][moves[i]-1] = 0;
                break;
            }
        }
        console.log(picked);
        if (picked == 0) continue;
        
        if(pickedList.length == 0 && picked != 0){
            pickedList.push(picked);
            continue;
        }

        if(pickedList[pickedList.length -1 ] == picked){
            pickedList.pop();
            answer+=2;
        }else{
            pickedList.push(picked)
        }        
    }
    
    return answer;
}

소감

  • 문제를 이해하는데 조금 시간이 걸렸지만 난이도가 높은 문제는 아니었다.