알고리즘

[java] 프로그래머스 크레인 인형뽑기

_DAMI 2023. 8. 9. 18:23

https://school.programmers.co.kr/learn/courses/30/lessons/64061

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

import java.util.*;
class Solution {
    public int solution(int[][] board, int[] moves) {
      int cnt = 0;
	        int row= board.length;
	        int col= board[0].length;
	        
	        Stack<Integer> st = new Stack<>();
	        for(int i=0; i<moves.length; i++){
	            for(int j=0; j<col; j++){
	            	int target = board[j][moves[i]-1];
	                if(target>0){
	                    if(st.size()>0 && st.peek()==target){
	                        st.pop();
	                        board[j][moves[i]-1]=0;
	                        cnt += 2;
	                        break;
	                    }else{
	                        
	                    st.add(target);
	                    board[j][moves[i]-1]=0;
	                    break;
	                    }
	                }
	            }
	            
	        }
	        return cnt;
    }
}

주의할점

1. 2차원배열의 행과 열

2. 배열은 0,0 ~ 시작하니까 board에서 젤 위에 값을 구할 때는 for문은 i=0부터 시작하면 된다.

3.stack은 LIFO 나중에 들어온 것이 먼저 나간다. Queue는 FIFO

4.공통적인 사항은 IF문에서 빼도 될듯