본문 바로가기
코딩테스트/프로그래머스(lv1)

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

by 볼링치는 개발자 2021. 1. 24.
반응형

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

크레인 인형뽑기 게임

구현 방법

처음에 문제를 보자마자, 2차원 벡터를 사용하고, 위에 있는 것부터 뽑아야 하므로 스택을 사용해야 할 줄 알고 헤매고 있었습니다.

 

몇 분간 고민하고, 문제를 너무 어렵게 생각하는 거 같아 단순하게 생각했습니다.

 

2차원 배열을 스택으로 넣어주는게 아닌 단순하게 좌표로 생각했습니다.

 

2중 for문으로 2차원 배열의 모든 원소를 moves 배열의 순서대로 검사하며, 인형을 뽑아 결과 배열에 넣어주고, 인형을 넣어주면서 기존에 있던 인형과 같으면 점수+2를 해주었습니다.

 

해당 로직에 대한 코드는 아래와 같습니다.

소스코드

#include <bits/stdc++.h>
using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    int doll = 0;
    //인형을 뽑아서 답을 배열
    stack<int> result;

    //이동해야 하는 만큼 반복
    for(int i = 0 ; i < moves.size() ; i++) {
        for(int j = 0 ; j <board.size(); j++) {
            //입력받는 board사이즈 만큼 반복하여 해당 칸에 저장되어있는 원소 확인
            doll = board[j][moves[i]-1];
            
            //0이 아닌 인형이 있으면
            if(doll !=0 ) {
                //결과 배열에 비어있으면 인형 넣어줌
                if(result.empty()) {
                    result.push(doll);
                } else {
                    //결과 배열에 이전에 넣어준 인형이 있으면 비교하고
                    //같은게 들어오면 뽑아주고 점수에 +2 점
                    if(result.top() ==doll) {
                        result.pop();
                        answer+=2;
                    } else {
                        //다른 인형이 들어오면 쌓아줌
                        result.push(doll);
                    }
                }
                //인형 뽑아온 부분은 0으로 변경해줌
                board[j][moves[i]-1]=0;
                break;
            }
        }
    }
    return answer;
}
반응형

댓글