728x90
반응형

2021.05.29

문제명 : 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임

사용언어 : Javascript

개발 시간 : 90분

 

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

 

 

📋 문제 설명

NxN행렬에서 인형을 뽑아 쌓을 때 중복되어 없어지는 인형의 갯수를 구하는 문제입니다

 

 

📢 입출력 예

 

 

🔑 문제 풀이

예시의 board 배열을 테이블 형식으로 표현하면 다음과 같습니다.

각각의 숫자를 '1'이라는 인형, '2'라는 인형이라고 생각하면 이해가 빠를 것입니다.

단 '0'은 비어있는 공간이라고 생각하는 것입니다.

 

0 0 0 0 0
0 0 1 0 3
0 2 5 0 1
4 2 4 4 2
3 5 1 3 1

 

 

 

moves [1,5,3,5,1,2,1,4]는 위 테이블 하단에 해당하는 숫자로,

⁕ 첫 번째 1의 경우

0은 비어있는 공간이라고 생각하기로 했기 때문에 크레인이 지나치므로 '4'라는 인형이 뽑힙니다.

'4'라는 인형이 뽑혔으므로 그 자리는 공백이 됩니다  

 

 

 

⁕ 두번째 5의 경우

마찬가지로 0이라는 빈 공간 지나치면 크레인은 '3'이라는 인형을 뽑고 그 자리는 공백으로 바뀝니다.

 

 

이런 식으로 뽑으면 순서대로 4 → 3 →  113 → 2 → '없음' → 4라는 인형이 뽑힙니다.

중복이 되는 경우 인형은 터진다고 했으므로, 4 → 3 →  1 → 1 에서 '1'이라는 인형 두 개는 터지고,

4 → 3 → 3 에서 '3'이라는 인형 두 개가 터집니다.

그 후에는 더이상 중복이 발생하지 않으므로 종료됩니다.

따라서 4개의 인형이 터지게 됩니다.

 

 

이를 코드로 변경하면,

function solution(board, moves) {
    var answer = 0;
    var res_arr = new Array();
    var chk = "N";

    var y = 0;
    for(var i=0; i<moves.length; i++){
        if(chk == "N"){
            y = i;    
        }
        
        var x = moves[i] - 1; 
        
        for(var j=0; j<board.length; j++){
        	// 빈 공간이 아니라면
            if(board[j][x] != 0){ 
                
                // 해당 인형을 넣기
                res_arr.push(board[j][x]); 
                
                // 뽑힌 인형 자리는 빈 공간(0)으로 변경
                board[j][x] = 0;	
                
                // 중복 발생시
                if((res_arr[y] == res_arr[y-1])){ 
                    
                    // 터지는 인형은 기존것과 새로 뽑힌것 : 총2개
                    answer = answer + 2;	
                    
                    // 기존것 제거(터지기)
                    res_arr.pop();	
                    // 새로뽑힌 것 제거(터지기)
                    res_arr.pop();  
                    
                    y--;
                    chk = "Y";
                }else{
                     y++;
                }
                
                break;
            }
        }        
    }
    
    return answer;
}

 

728x90
반응형

+ Recent posts