본문 바로가기
공부/알고리즘

2019 카카오 개발자 겨울 인턴십 > 크레인 인형뽑기 게임

by shining park 2024. 11. 2.

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

- 나의 풀이

✅ Stack 스택 ➡︎ 인형뽑기 등과 같이 맨 위의 데이터를 뽑거나, 최근에 삽입한 데이터를 대상으로 뭔가 비교/연산할 때 사용

  • 바구니 스택 : bucketSt
  • 인형이 들어있는 2차원 배열의 board 각 한줄에 대한 스택 : lineSt ➡︎ 배열 스택
bucketSt, lineSt 스택 그림 설명

 

✅ lineSt에 인형 채우기 순서

이차원 배열 board[][]에 인형들을 lineSt 에 채우는 순서 그림 설명

 

 

- 나의 코드

import java.util.Stack;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        int n = board.length;
        
        //바구니 스택
        Stack<Integer> bucketSt = new Stack<>();
        
        //한줄에 대한 스택 n개 생성
        Stack<Integer>[] lineSt = new Stack[n];
        for(int i=0; i<n; i++) {
            lineSt[i] = new Stack<>();
        }
        
        //인형 채우기 _ 바닥부터 채우기 i역순
        for(int i=n-1; i>=0; i--) {
            for(int j=0; j<n; j++) {
                //0은 빈칸
                if(board[i][j] != 0) {
                    lineSt[j].push(board[i][j]);
                }
            }
        }
        //System.out.println(lineSt[0]);
        
        //크레인 작동
        for(int move : moves) {
            //lineSt 비어있지 않으면, pop
            if(!lineSt[move-1].isEmpty()) {
                int num = lineSt[move-1].pop();
                
                //바구니가 비어있지 않고, 이전 인형 peek 과 같으면
                if(!bucketSt.isEmpty() && bucketSt.peek() == num) {
                    //터짐, answer+2
                    bucketSt.pop();
                    answer += 2;
                } else {
                	//바구니에 넣기
                    bucketSt.push(num);
                }
            }
        }
        
        return answer;
    }
}

'공부 > 알고리즘' 카테고리의 다른 글

기능개발  (0) 2024.11.04
숫자 짝꿍  (0) 2024.11.03
N-Queen  (0) 2024.11.01
2019 KAKAO BLIND RECRUITMENT > 실패율  (1) 2024.11.01
공원 산책  (0) 2024.10.30