프로그래머스 Lv.1 [2019 카카오 개발자 겨울 인턴십] - 크레인 인형 뽑기 (정답률 하위 TOP 6) ★★

세나정·2023년 5월 5일
0
post-thumbnail

문제




내 풀이

정말 푸는데 족히 2시간은 걸린 문제.. 생각한 수도코드에 대한 로직을 짜는데는 오래걸리지 않았지만, TC 1번 2번 (ex. [[0,0,0,0], [0,0,0,0], [0,0,0,0,], [0,0,0,0,]], [1,2,3,4]) 같은 곳에 에러처리를 하지 않아 한참을 걸렸다. 그래서 console로 한참을 찍다 undefined로 이루어진 배열임을 확인하고 그에대한 처리를 해주느라 오래걸린 것 같다 (괜히 복잡하게 생각해선..)

function solution(board, moves) {
	// 각 층으로 주어진 배열을 각 컬럼별로 바꾸는 코드
    // sortBoard라는 곳에 각 배열의 i에 해당하는 값들을 넣어주면 된다
    const sortBoard = board.map( (_, i) => board.map(row => row[i]) );
    
    let busket = [];
    let ans = 0;
    
    // for문을 돌며 0보다 큰 값을 발견시 (find - 값 반환) 그 값을 busket에 넣어주고
    // 발견했던 애의 인덱스 (findIndex - 인덱스반환)을 저장하여 기존 배열을 0으로 바꿔줌
    for (i=0; i<moves.length; i++) {
            k = sortBoard[moves[i]-1].find( v => v > 0)
            index = sortBoard[moves[i]-1].findIndex( v => v > 0)
            
        	// 뺸 값을 넣기
            busket.push(k)
            // 빼준 곳은 0으로 바꾸기
            sortBoard[moves[i]-1].splice(index, 1, 0)
        	
            // undefined로 이루어진 배열의 에러처리를 해주기 위해 값이 존재할 때라는 조건을 추가
            if (busket[busket.length-1] && busket[busket.length-2] === busket[busket.length-1]) {
                ans+=2
                busket.pop()
                busket.pop()
          }    
    }
    
    return ans
}

// TC의 예상 결과 -> 1 1 삭제 후 3 3 삭제 즉, 총 4개 삭제.
// 4 3 1 1 3 2 X 4
profile
기록, 꺼내 쓸 수 있는 즐거움

0개의 댓글