본문 바로가기

PS

[Programmers] LV1 - 크레인 인형뽑기 게임

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

 

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

[[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

 

 

문제 파악

1. 크레인이 moves 배열의 위치로 가서 인형을 뽑는다 (이동 후 board [row][col]!= 0 인 위치 찾기)

2. 해당 row를 찾아서 값을 가져오고 바구니에 순차적으로 쌓는다. (Stack)

3. 이전에 쌓여있는 인형과 지금 뽑아서 바구니에 넣으려는 인형이 같다면 터트린다. (이 과정에서 인형 2개가 사라짐)

그리고 뽑은 위치의 board[row][col] 값은 0으로 처리한다.

 

나는 한 col 모두 0 일 경우를 예외 처리 하는 로직만 좀 더 추가했다.

더보기
import java.util.*;
class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        
        Stack<Integer> st = new Stack<>();
        
        //PrintArray(board);
        
        for(int idx = 0; idx<moves.length;idx++)
        {
            int col = moves[idx]-1;
            int row = FindDolls(board,col);
                        
            int value = board[row][col];
            
            if(!st.isEmpty() && st.peek() == value)
            {
                st.pop();
                answer+=2;
            }
            else
            {
                if(value!=0) st.push(value);
            }
            board[row][col] = 0;
        }
        return answer;
    }
    
    public int FindDolls(int[][] board, int col){
        
        int row = 0;
        boolean init = false;
        for(int r = 0; r<board.length;r++){
            if(board[r][col]!=0){
                row = r;
                init = true;
                break;
            }
        }
        return init ? row : 0 ;
    }
    
    public void PrintArray(int[][] board){
        for(int r = 0; r<board.length;r++){
            for(int c = 0; c<board[r].length;c++)
            {
                System.out.print(board[r][c] +" ");
            }
            System.out.println();
        }
    }
}

 

'PS' 카테고리의 다른 글

[Programmers] LV3 - 단어 변환  (0) 2021.07.05
[Programmers] LV3 - 순위  (0) 2021.07.03
[Programmers] LV2 - 짝지어 제거하기  (0) 2021.06.30
[Programmers] LV2 - 영어 끝말잇기  (0) 2021.06.29
[BOJ] 1141번 : 접두사  (0) 2021.06.28