어흥

[프로그래머스] 크레인 인형뽑기 게임(C++) 본문

알고리즘/프로그래머스

[프로그래머스] 크레인 인형뽑기 게임(C++)

라이언납시오 2021. 3. 17. 21:00
728x90
반응형

 

문제 링크: 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

1. 주의할 점

- 크레인으로 뽑는 경우, 뽑은 자리는 0으로 바꾼다

- 바구니의 가장 위에 위치한 인형과 뽑은 인형만 비교한다

 

2. 구현

- 뽑으려는 위치를 idx로 표시한다(기존의 원소 - 1)

- 위에서부터 뽑으므로 0부터 Num-1까지 탐색하여 인형이 있다면 뽑은 후, 해당 위를 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 num = board.size();
    vector<int> v;
    for(int i=0;i<moves.size();i++){
        int idx = moves[i]-1;
        for(int j=0;j<num;j++){
            int val = board[j][idx];
            if(val){
                board[j][idx]=0;
                if(!v.empty()){
                    if(v[v.size()-1]==val){
                        answer+=2;
                        v.pop_back();
                        break;
                    }
                }
                v.push_back(val);
                break;
            }
        }
    }
    return answer;
}
728x90
반응형
Comments