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() - 가장 최근 값 조회