배열 큐를 만들어보고싶었는데, 안돼서 그냥 탐색 기법으로 풀었다.
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 |