Programmers_크레인인형뽑기

한상현·2021년 5월 13일
0

Algorithm

목록 보기
13/33

😭 바구니에 있는 인형의 수를 구하는 줄 알고 삽질 20분간 했다. 역시 문제를 잘읽자!

💻 크레인 인형뽑기 게임

  • vector[] 로 각 index에 따른 인형의 수를 넣어줬다.
  • 가장 위쪽 인형만이 필요하므로 push_back, pop_back을 쓰기 위해서 마지막 배열부터 값을 집어넣어줬고, 0은 넣지 않았다.
  • 바구니는 stack 으로 만들어줬다. (가장 마지막에 들어온 값과 비교해야 하기 때문)
  • 바구니의 끝 부분의 인형과 가져온 인형이 같으면 ? answer+=2
  • 같지 않으면? stack에 인형 push
#include <string>
#include <vector>
#include <stack>

using namespace std;

int solution(vector<vector<int>> board, vector<int> moves)
{
    int answer = 0;
    vector<int> v[31];
    stack<int> result;

    for (int i = board.size() - 1; i >= 0; i--)
    {
        for (int j = 0; j < board[i].size(); j++)
        {
            if (board[i][j] == 0)
                continue;
            v[j + 1].push_back(board[i][j]);
        }
    }

    for (int i = 0; i < moves.size(); i++)
    {
        if (v[moves[i]].size() == 0)
            continue;
        else
        {
            if (result.size() != 0 && result.top() == v[moves[i]].back())
            {
                result.pop();
                answer += 2;
            }
            else
                result.push(v[moves[i]].back());
            v[moves[i]].pop_back();
        }
    }

    return answer;
}
  • v의 size가 0인 경우에는 아무것도 하지 않고 continue 시켜준다.

쉬운 문제였다. 따라만 하면 풀리는 문제. 딱 기업 코테의 1번에 나올만한 문제.

profile
의 공부 노트.

0개의 댓글