csmoon1010의 SW 블로그

[200507] 크레인 인형뽑기 게임 - 2019카카오인턴(level1) 본문

Coding Test/프로그래머스

[200507] 크레인 인형뽑기 게임 - 2019카카오인턴(level1)

csmoon1010 2020. 5. 7. 11:22

소마 2차 코딩테스트를 탈락하고 거의 2주동안은 탈락으로 인한 우울함과 연휴로 코딩연습을 쉬었다...

다시 정신을 차리고 프로그래머스 코딩테스트를 우선 level별로 풀어볼 예정이다.

 

1. 문제이해

- board 배열의 위에서부터 인형을 꺼냄

- moves배열의 앞에서부터 기준 열을 정함

- 꺼낸 인형을 스택에 넣으면서 peek에 같은 인형이 있는 경우는 꺼내기

 

2. 전략

- 각 board의 top위치를 topList 배열에 저장

- target = board[top][moves의 숫자]에 해당하는 위치의 인형

- basket 스택이 비어있지 않음 : target과 peek이 같으면 pop한 후 answer에 +2

- peek과 같지 않거나 스택이 비어있음 : push

 

3. 참고사항

**Stack의 peek, pop을 적극 활용

 

4. 코드

import java.util.*;
class Solution {
    public int solution(int[][] board, int[] moves) {
        int answer = 0;
        int target = 0;
        Stack<Integer> basket = new Stack<>();
        int[] topList = new int[board.length];
        for(int i = 0; i < board.length; i++){
            for(int j = 0; j < board.length; j++){
                if(board[j][i] != 0){
                    topList[i] = j;
                    break;
                }
            }
        }
        for(int i = 0; i < moves.length; i++){
            int column = moves[i]-1;
            int top = topList[column];
            if(top >= board.length) continue;
            else{
                target = board[top][column];
                board[top][column] = 0;
                topList[column]++;
                if(!basket.isEmpty()){
                    int peek = basket.peek();
                    if(peek == target){
                        basket.pop();
                        answer += 2;
                    }
                    else    basket.push(target); 
                }
                else    basket.push(target);
            }
        }
        return answer;
    }
}
Comments