반응형

문제 링크

 

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

[[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

 

풀이 )

  • 바구니(basket)가 비어있는 경우 선택된 인형(picked)을 그대로 넣고
  • 바구니가 비어있지 않은 경우 basket에서 가장 위에 있는 인형(basket.back())과 인형을 비교해서
    • 같은 경우 선택된 인형과 가장 위의 인형을 제거 하기 위해서 basket.pop_back()을 하고 답에 2를 더하고
    • 다른 경우 선택된 인형을 바구니에 넣는다. basket.push_back(picked)
#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    int len_moves = moves.size();
    int len_board = board.size();
    int picked;
    vector<int> basket;

    for(int i = 0; i < len_moves; ++i){
        int crain = moves[i]-1;
        for(int j = 0; j < len_board; ++j){
            if(picked = board[j][crain]){
                board[j][crain] = 0;
                if(basket.empty()){
                    basket.push_back(picked);
                    break;
                }
                if(basket.back() == picked){
                    basket.pop_back();
                    answer += 2;
                }
                else
                    basket.push_back(picked);
                break;
            }
        }
    }
    return answer;
}

 

주의점 )

  • 인형을 뽑은 이후 board에서의 값을 0으로 변경
  • 인형을 고른 후 작업을 마친 다음 break
반응형

+ Recent posts