import java.util.Stack;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
Stack<Integer> stack = new Stack<Integer>();
stack.push(0);
for (int i = 0; i < moves.length; i++) {
int select = moves[i] - 1;
for (int j = 0; j < board.length; j++) {
if (board[j][select] != 0) {
if (stack.peek() == board[j][select]) {
stack.pop();
answer += 2;
} else{
stack.push(board[j][select]);
}
board[j][select] = 0;
break;
}
}
}
return answer;
}
}
-> 문제를 읽자마자, 스택을 사용해봐야겠다는 생각이 들었다.
문제풀이
1. stack 객체 생성->그 안에 0을 넣어준다. (넣어준 이유: stack.peek()해서 맨 위의 값을 읽어오는 과정에서 처음에는 값이 없기 때문에 stack.peek()하면 에러가 나기 때문)
2. 반복문을 돌려 move의 값을 select 변수 안에 저장한다. move[i]-1을 한 이유는 초기 값이 1부터 시작하기 때문
3. board.length로 for문을 돌려 (board[j][select])가 0이 아닐때 라는 조건을 걸어 2차원 배열 안의 값과 stack 맨 위에 있는 값을 비교하여 같으면 answer에 2를 더해준다.
4. 더해주면서 그 값을 0으로 넣어주고 break 반복문을 빠져나온다.
시행착오
1. stack에 넣는 것은 이행했으나, 초기값 0을 넣어줄 생각을 안 하고 stack.size()를 이용해서 복잡하게 해보려고 한 점
2. if(stack.peek()==board[j][select]) -> 이 조건문 안에 break를 넣어주고 board[j][select] 값을 0으로 변환시키지 않아서 뽑고 그 위에 있으면 또 뽑고(4번을 뽑았으면 그 값은 0)이 되어야 빈 공간이 되는 것...
'코딩테스트 문제풀이' 카테고리의 다른 글
프로그래머스 (실패율) (0) | 2021.09.22 |
---|---|
프로그래머스 (폰켓몬) (0) | 2021.09.21 |
프로그래머스 (완주하지 못한 선수) (0) | 2021.09.15 |
프로그래머스 (없는 숫자 더하기) (0) | 2021.09.15 |
프로그래머스 (키패드 누르기) (0) | 2021.09.14 |