본문 바로가기

알고리즘 공부 및 문제 풀이/프로그래머스(PRO)

[pro] 프로그래머스 level1 64061 크레인 인형뽑기 (Java) - 스택

[문제]

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

 

프로그래머스

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

programmers.co.kr

 

[풀이]

주어진 board내 인덱스만 조절해서 풀어도 되지만 column별 큐에 담아 쉽게 맨 위에 있는 인형을 뽑을 수 있도록 했다. 바구니는 맨 위에 있는 인형과 비교해서 터뜨리거나 그냥 넣기 때문에 스택을 이용해서 구현한다.

 

[코드]

 

package heap_stack_dequeue;

import java.util.*;

class Pro_level2_64061 {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        //크레인을 모두 작동시킨 후 터트려져 사라진 인형의 개수를 return
        int len = board.length;
    
        List<Queue<Integer>> list = new ArrayList<>();
        for(int i=0; i<len; i++){
            list.add(new LinkedList<>());
        }
        
        for(int i=0; i<len; i++){
            for(int j=0; j<len; j++){
                if(board[j][i]!=0){
                    list.get(i).add(board[j][i]);
                }
            }
        }
        
        
        Stack<Integer> box = new Stack<Integer>();
        Queue<Integer> q;
        for(int move:moves){
            q = list.get(move-1);
            
            if(q.isEmpty()) continue;
            
            int doll = q.poll();
                
            if(!box.isEmpty() && doll==box.peek()){
                answer += 2;
                box.pop();
            } 
            else{
                box.push(doll);
            }
        }
        return answer;
    }
}