[프로그래머스] 2019 카카오 개발자 겨울 인턴십 크레인 인형뽑기 게임 자바코드

mango·2023년 6월 25일
0

프로그래머스 level 1

목록 보기
10/17

* Things i leant

1. Stack 클래스 사용법!

정리글 : https://velog.io/@1108mango/JAVA-Stack%EA%B3%BC-Queue

2. HashMap 안에 Stack 즉 Object를 넣을 줄 알아야 함

Stack<Integer> a;
HashMap<Integer, Stack> boardHM = new HashMap<Integer, Stack>();
        
for(문){
	a = new Stack<Integer>();
    for(문){
    	a에 여러가지 아이템 push
    }
    boardHM.put(i, a)
    // 새로운 Stack을 선언해서 각각 아이템 다르게 넣은 Stack을 HashMap에 저장할 수 있음
}        

3. 형 강제변환

Stack 함수에서 pop이나 peek 함수의 return 형태는 Object 인데, 이걸 int형으로 받고 싶으면 어렵게 생각하지 말고 (int) 로 강제변환

4. array의 index 규칙 정하기

2차원 어레이의 값을 index 규칙을 정해서 자유자재로 접근할 수 있어야 함

* 알고리즘

  1. board 2차원 어레이를 세로로 쪼개어 1번 Stack, 2번 Stack 이런식으로 HashMap에 저장
  2. 세로로 쪼갠 board에서 제일 아래 아이템부터 Stack에 집어넣음
  3. moves를 읽으면서 그 번호의 Stack에 접근하여 pop
  4. pop한 아이템은 basket 스택에 넣어줌
  5. basket에 push될 때 마다 바로 아래 아이템을 가진 변수 underItem과 peek으로 제일 위 아이템을 비교하여 같으면 팝팝 해줌
  6. 마지막 줄에서 underItem을 갱신, 비었으면 0으로 할당

* 자바 코드

import java.util.*;

class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        int garbage = 0;
        Stack<Integer> a;
        HashMap<Integer, Stack> boardHM = new HashMap<Integer, Stack>();
        Stack<Integer> basket = new Stack<Integer>();
        int underItem = 0;
                
        for(int i = 0; i < board[0].length; i++){
            a = new Stack<Integer>();
            for(int j = board.length - 1; j >= 0; j--){
                if (board[j][i] != 0)
                    a.push(board[j][i]);
            }
            boardHM.put(i+1, a);
        }
        
        for(int i = 0; i < moves.length; i++){
            if(!(boardHM.get(moves[i]).empty())){                
                basket.push((int)boardHM.get(moves[i]).pop());
                
                //System.out.println("empty아니야 : "+(int)boardHM.get(moves[i]).pop());
                
                if(underItem == (int)basket.peek()){
                    basket.pop();
                    basket.pop();
                    answer++;
                }
                if(!basket.empty())
                    underItem = (int)basket.peek();
                else
                    underItem = 0;
            }
        }
        
        return answer * 2;
    }
}

-> 처음 프로그래머스 시작했을 때 Stack을 몰라서 못푼 문제인데 1단계 약 20문제 풀고나니, exception 없이 한번에 통과해서 아주 뿌듯

profile
앎의 즐거움을 아는 나는 mango ♪

0개의 댓글