크레인 인형뽑기 게임(java)
문제설명
생각하기
- board에 있는 2차원배열의 순서를 생각하기
- moves의 움직임에 따라 board의 값을 변경해주기
- 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으로 만들어준다.
Author And Source
이 문제에 관하여(크레인 인형뽑기 게임(java)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@juntree/크레인-인형뽑기-게임java저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)