오늘하루도 우힣ㅎ

크레인 인형뽑기 게임 - c++ (2019 카카오 개발자 겨울 인턴십) 본문

알고리즘/프로그래머스

크레인 인형뽑기 게임 - c++ (2019 카카오 개발자 겨울 인턴십)

우힣 2020. 4. 12. 17:36

해당 문제는 프로그래머스에서 level1에 있다. 아래는  해당 문제의 출처이다.

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

해당 문제의 경우 stack을 이용하여 풀어야 한다. 

 - 같은 캐릭터가 들어가게 될경우 stack에서 해당 캐릭를 pop하도록 한다

 - 들어가는 캐릭터와 stack의 top에 있는 것이 다르다면 그냥 push한다.

 -> 나의 경우 같은 캐릭터가 있을경우 pop을 한다음에 또 한번 체크를 해주어야 한다는 실수를 했었다. 전혀 그럴필요가 없는데 말이다...

 

#include <vector>

using namespace std;

int solution(vector<vector<int>> board, vector<int> moves){
	int answer=0;
    vector<int> basket;//크레인에서 옮겨져 오는 것들을 모아 두는 바구니
    
    for(int i=0;i<moves.size();i++){
    	int emptyCnt=0;//빈공간들을 세어주기 위한 변수
        int value;
        
        for(int j=0;j<board.size();j++){
        	value = board[j][moves[i]-1];//크레인이 세로로 움직인다는 것을 생각하여 j를 우선적으로보기
            
            if(value == 0) emptyCnt++;
            else break;
        }
        
        //만약 모든 부분이 비어 있다면 아래의 코드를 실행하면 안됨을 의미한다.
        if(emptyCnt<board.size()){
        	basket.push_back(value);//크레인이 뽑아온것을 넣어주고
            board[emptyCnt][moves[i]-1]=0;//뽑아온곳의 값은 0으로 하여 비어있음을 명시
            
            //가장위의 값과 그 아래의 값이 같을때
            if(basket.size()>=2 && value==basket[basket.size()-2]){
            	basket.pop_back();
                basket.pop_back();
                answer+=2;//한번에 두개의 인형이 사라지므로 +2
            }
        }
    }
    return answer;
}
          

 

 

Comments