PROGRAMMERS/KAKAO
PROGRAMMERES Level 1 2019 카카오 개발자 겨울 인턴십 JAVA
c0mmedes
2022. 7. 21. 17:42
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
int count =0;
boolean flag[][] = new boolean[board.length][board[0].length];
for(int i=0; i<board.length; i++){
for(int j=0; j<board.length; j++){
flag[i][j] = false;
}
}
//바구니
ArrayList<Integer> basket = new ArrayList<>();
for(int i=0; i<moves.length; i++) {
for(int j=0; j<board.length; j++){
if(board[j][moves[i]-1]>0 && flag[j][moves[i]-1] == false) {
basket.add(board[j][moves[i]-1]);
count += 1;
flag[j][moves[i]-1] = true;
break;
}
}
if (count > 1) {
if(basket.get(count-1) == basket.get(count-2)){
basket.remove(count-1);
basket.remove(count-2);
answer += 2;
count -= 2;
}
}
}
return answer;
}
}
개선시킨 코드
ArrayList + count -> Stack 사용
for -> for each 사용
flag -> 사용한 board를 0으로 초기화
import java.util.*;
class Solution {
public int solution(int[][] board, int[] moves) {
int answer = 0;
//바구니
Stack<Integer> basket = new Stack<>();
for(int move : moves) {
for(int j=0; j<board.length; j++){
// 인형의 이름은 1이상
if(board[j][move-1]>0) {
//바구니가 비어있지않고 바구니안에있던 번호(이름)과 현재뽑은 번호(이름)이 같을경우
//전에 바구니에 있던 번호를 없애고 answer(사라진 인형) 갯수를 +2
if(!basket.isEmpty() && basket.peek() == board[j][move-1]){
basket.pop();
answer += 2;
//같지 않을 경우 바구니에 번호(이름) 추가
} else {
basket.push(board[j][move-1]);
}
// 사용했기 떄문에 사용한 곳은 0으로 초기화시키고 다음 반복에서 안걸리게 만듬
board[j][move-1] = 0;
break;
}
}
}
return answer;
}
}
Stack<Integer> stack = new Stack<>();
LIFO(Last In First Out) - 나중에 들어온 것이 먼저 나가는 형태의 자료구조
.pop() - 삭제
.push() - 추가
.clear() - 초기화
.peek() - 가장 최근 값 조회