문제를 풀기 전에 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으로 만들어준다.