알고리즘왕/Programmers

[프로그래머스/JAVA] 크레인 인형 뽑기 게임

찌 ㅋ 2021. 5. 3. 00:10

문제요약

  1. NxN 보드에서 하나씩 뽑아서 바구니에 넣기
  2. 바구니에서 똑같은 거 두개 쌓이면 터짐
  3. 터진 인형 개수 구하기

 

 

 

풀이

  1. 각 컬럼을 스택으로 만들어서 넣어 놓음
    • moves 순서대로 stack에서 인형을 꺼냄
  2. 바구니도 스택으로
    • 바구니에서 peek으로 확인 꺼내온 인형과 같으면 pop해서 버림
    • 다르면 push

 

 

더보기
package KakaoIntern2019.P64061_크레인인형뽑기게임;

import java.util.Stack;

public class Solution {

	static int solution(int[][] board, int[] moves) {
		int answer = 0;

		final int N = board.length;

		Stack<Integer>[] stacks = new Stack[N];
		Stack<Integer> basket = new Stack<>();
		for (int i = 0; i < N; i++) {
			stacks[i] = new Stack<>();
		}

		for (int c = 0; c < N; c++) {
			for (int r = N - 1; r >= 0; r--) {
				if (board[r][c] == 0)
					break;
				stacks[c].push(board[r][c]);
			}
		}

		for (int i = 0; i < moves.length; i++) {
			int target = moves[i] - 1;
			if (stacks[target].isEmpty())
				continue;
			int cur = stacks[target].pop();
			if (!basket.isEmpty() && basket.peek() == cur) {
				basket.pop();
				answer += 2;
			} else {
				basket.push(cur);
			}
		}

		return answer;
	}

	public static void main(String[] args) {
		System.out.println(1);
		int[][] b = { { 0, 0, 0, 0, 0 }, { 0, 0, 1, 0, 3 }, { 0, 2, 5, 0, 1 }, { 4, 2, 4, 4, 2 }, { 3, 5, 1, 3, 1 } };
		int[] m = { 1, 5, 3, 5, 1, 2, 1, 4 };
		System.out.println(123);
		System.out.println(solution(b, m));

	}

}