코테/프로그래머스

프로그래머스 크레인 인형뽑기 게임

65살까지 코딩 2022. 1. 17. 01:17
728x90
반응형
import java.util.Stack;

class Solution {
    public int solution(int[][] board, int[] moves) {
        //스스로 풀고 깔끔하게 잘풀었다고 생각이 드는 문제!
        int answer = 0;
        //뽑은 숫자가 같은 경우 없애야 하므로 stack 사용
        Stack<Integer> stack = new Stack<>();
        int length = board.length;
        int[][] new_check = new int[length][length];
        //행과 열을 바꿔줌 이러면 굉장히 쉽게 처리 할 수 있음 문제를 이해하고 조금만 생각해보면 이해가 될 것임!
        //뽑기가 옆으로 누웠다고 상상하면됨
        for(int i =0; i<length; i++){
            for(int j =0; j<length; j++){
                new_check[i][j] = board[j][i];
            }
        }
        int where = 0;
        int doll = 0;
        
        for(int i =0; i<moves.length; i++){
            //index 값이므로 -1
            where = moves[i] -1;
            for(int j =0; j<length; j++){
                // 행열을 뒤집어 바꾸었기 때문에 쉽게 접근 가능
                //뽑기가 옆으로 누웠다고 상상하면됨
                doll = new_check[where][j];
                if(doll !=0){
                    //비어있지 않다면
                    //비우고 나서 스택에 저장해주기
                    new_check[where][j] = 0;
                    //스택은 중복만 잘 확인해주면됨! 중복된다면 없애버리고 answer에 +2 해주기
                    if(!stack.empty() && stack.peek() == doll){
                        stack.pop();
                        answer +=2;
                    }else{
                        stack.push(doll);
                    }
                    break;
                }
            }    
        }
        return answer;
    }
}

문제: 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

 

728x90
반응형