티스토리 뷰

728x90

 

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

 

프로그래머스

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

programmers.co.kr

 

2019 카카오 개발자 겨울 인턴십의 Level 1 문제다.

 

 

각 바구니를 뜻하는 스택 배열(doll[])을 만들어 인형을 push했고,

크레인 작동으로 꺼내온 인형을 담는 스택(stack)을 만들었다.

 

인형을 하나씩 stack에 집어넣을 때마다 스택의 가장 위 인형이 무엇인지 확인(peek)하고,

집어넣으려는 인형과 스택의 가장 위에 있는 인형이 같다면 

그 인형 두개가 터트러져야 하므로 cnt를 2 증가시킨다.

그리고 인형을 집어넣지 않고 가장 위에 있는 인형을 삭제해야 하므로 pop한다.

 

List를 통해 풀 수도 있겠지만 LIFO의 스택 사용을 목적으로 한 문제인 것 같아 스택을 사용했다.

 

 

import java.util.Stack;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int n = board.length;
    	Stack<Integer>[] doll = new Stack[n];
    	
    	for(int i=0;i<n;i++)
    		doll[i] = new Stack<>();
    	
        for(int i=n-1;i>=0;i--) {
        	for(int j=0;j<n;j++) {
        		if(board[i][j] != 0) {
        			doll[j].push(board[i][j]);
        		}
        	}
        }
        
        int cnt = 0;
        Stack<Integer> stack = new Stack<>();
        
        for(int i=0;i<moves.length;i++) {
        	int m = moves[i] - 1;
        	if(doll[m].size() != 0) {
        		int d = doll[m].pop();
        		if(!stack.isEmpty() && stack.peek() == d) {
        			stack.pop();
        			cnt += 2;
        		}
        		else 
        			stack.push(d);
        	}
        }

        return cnt;
    }
}
728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함