코딩테스트/Java

(2019 카카오)크레인 인형뽑기 게임 Java

SK_MOUSE 2020. 12. 18. 15:01
반응형

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

배열 큐를 만들어보고싶었는데, 안돼서 그냥 탐색 기법으로 풀었다.

import java.util.LinkedList;
import java.util.Queue;
import java.util.Stack;

class Solution {

    public int solution(int[][] board, int[] moves) {
        int answer = 0;

        //보관소도 스택으로 쌓음.(LIFO)
        Stack<Integer> stack = new Stack<>();

        //LIFO 방식으로 peek()==뽑은값 소멸, 아니면 다시넣기.
        for(int i =0; i<moves.length; i++){
            int pickLoc = moves[i]-1;
            int pick = findVal(board, pickLoc);//참조변수
            if(pick==0) continue;
            if(!stack.isEmpty() && stack.peek()==pick){//만약 뽑은인형과 맨위 인형이 같으면
                stack.pop();//보관소에서 인형 빼버리기.
                answer++;
            }
            else{
                stack.push(pick);
            }
        }
        return answer*2;
    }
    public int findVal(int board[][], int j){
        for(int i =0; i<board.length; i++){
            if(board[i][j]!=0) {
                int get = board[i][j];
                board[i][j] =0;
                System.out.println(get);
                return get;
            }
        }
        return 0;
    }
}

 

마지막의 return 값은 없어진게 한쌍씩(2개) 없어지므로 answer*2를 해주었다.

 

추가적으로, 시도했던 Queue를 배열형으로 만들고싶어서 시도해봤는데..

Queue<Integer>[] qArray = new Integer[4]; 이런식으로 선언하는것은 없나보다.

 

 

 

 

다른사람의 풀이) 

import java.util.Stack;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        Stack<Integer> stack = new Stack<>();
        for (int move : moves) {
            for (int j = 0; j < board.length; j++) {
                if (board[j][move - 1] != 0) {
                    if (stack.isEmpty()) {
                        stack.push(board[j][move - 1]);
                        board[j][move - 1] = 0;
                        break;
                    }
                    if (board[j][move - 1] == stack.peek()) {
                        stack.pop();
                        answer += 2;
                    } else
                        stack.push(board[j][move - 1]);
                    board[j][move - 1] = 0;
                    break;
                }
            }
        }
        return answer;
    }
}
반응형

'코딩테스트 > Java' 카테고리의 다른 글

(2019 카카오) 키패드 누르기 Java  (0) 2020.12.23
(2019 카카오) 실패율 Java  (0) 2020.12.21
[JAVA] 백준 "단지번호붙이기"  (0) 2020.12.03
[JAVA] 백준 "바이러스"  (0) 2020.12.03
[JAVA] 백준 "DFS와 BFS"  (0) 2020.12.02