크레인 인형뽑기 게임(java)

문제설명




생각하기

  1. board에 있는 2차원배열의 순서를 생각하기
  2. moves의 움직임에 따라 board의 값을 변경해주기
  3. if문으로 예외조건들 처리해주기

내 풀이

문제를 풀기 전에 2차원 배열의 형태를 파악해야한다 .
처음 문제를 풀때 제대로 파악하지 못하여 1시간을 날렸다.
board에 들어있는 배열형태

00000
00103
02501
42442
35131

이걸 생각하며 문제를 풀자

import java.util.Stack;
class Solution {
    public int solution(int[][] board, int[] moves) {
        int ans = 0;
        Stack<Integer> stack = new Stack<>();
        
        for(int move : moves){
            for(int i=0; i<board.length; i++){
                if(board[i][move-1] !=0){
                    if(stack.empty()){
                        stack.push(board[i][move-1]);
                        board[i][move-1] = 0;
                        break;
                    }
                    
                    if(board[i][move-1] == stack.peek()){
                        stack.pop();
                        ans+=2;
                    }else{
                        stack.push(board[i][move-1]);
                    }
                    board[i][move-1] =0;
                    break;
                    
                }
            }
        }
        return ans;
    }
}

stack을 쓰기전에 Arraylist로 풀었다. 성능면에서는 둘다 비슷했지만 Stack을 자주사용하지 않았기에 이번기회를 맞이해서 stack로 풀어보았다.

Stack의 기능들
stack.push() -- 값을 집어넣는다.
stack.pop() -- 마지막 값을 뺀다.
stack.peek() -- 가장 위의 값을 확인한다(true,false)
stack.empty() -- 스택이 비어있는지 확인한다.
stack.search() -- 원하는 값의 인덱스값을 반환.
stack.clear() -- stack을 비운다.

우리가 뽑아야 하는 moves를 ForEach문으로 반복시킨다.
뽑을 위치에 0이 없고, 스택이 비어있다면 스택에 바로 추가시킨다. 추가시키고 난뒤엔 뽑은 값은 0으로 만들어준다.
뽑은 값과 stack에 있는 값이 같다면 pop을 이용해 stack 마지막값을 빼고 ans+2시킨다.
같지않다면 push로 스택에 넣어준다.
이후 뽑은 값을 0으로 만들어준다.

좋은 웹페이지 즐겨찾기