본문 바로가기
알고리즘 문제풀이/프로그래머스

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

by m2162003 2021. 1. 19.

programmers.co.kr/learn/courses/30/lessons/64061

 

코딩테스트 연습 - 크레인 인형뽑기 게임

[[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]] [1,5,3,5,1,2,1,4] 4

programmers.co.kr

 

 

 

스택을 사용하는 문제이다. 

moves를 순회하고 각 요소는 col에 해당한다. 

col은 고정된 상태로 row=0부터 마지막 row까지 돌면서 0이 아닌 값이 있다면 break

 

0이 아닌 값이 있다면 스택에 현재 값을 푸쉬하고 두개를 터트릴 수 있는지 확인한다.

그런 다음에 0으로 바꾸고 answer+=2;한다.

#include <string>
#include <vector>
#include <iostream>
using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    
    int len = board.size();
    int movelen = moves.size();
    
    vector<int> v;
    for(int i=0; i<movelen; i++){
        int col = moves[i]-1;
        
        int row = 0;
        // check
        while(row<len){
            
            if(board[row][col]!=0){
                v.push_back(board[row][col]);
                board[row][col] = 0;
                
                //bomb
                int vsize = v.size();
                if(vsize>=2 && v[vsize-1]==v[vsize-2]){
                    answer+=2;
                    v.pop_back();
                    v.pop_back();
                }
                break;
            }
            row++;
        }
    }
    return answer;
}

 

 

스택을 이용해 좀 더 깔끔하게 코드를 짜보자

#include <string>
#include <vector>
#include <stack>
using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    
    stack<int> s;
    for(int i=0; i<moves.size(); i++){
        int col = moves[i]-1;
        
        for(int j=0; j<board.size(); j++){
            
            if(board[j][col] !=0){
            
                if(!s.empty() && s.top() == board[j][col]){
                    s.pop();
                    answer +=2;
                }else{
                    s.push(board[j][col]);
                }
                
                board[j][col] = 0;
                break;
            }
        }
    }
   
    return answer;
}

댓글