문제설명

크레인 인형뽑기 게임 - 프로그래머스

 

프로그래머스

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

programmers.co.kr

[제한사항]

  • board 배열은 2차원 배열로 크기는 "5 x 5" 이상 "30 x 30" 이하입니다.
  • board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다.
    • 0은 빈 칸을 나타냅니다.
    • 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다.
  • moves 배열의 크기는 1 이상 1,000 이하입니다.
  • moves 배열 각 원소들의 값은 1 이상이며 board 배열의 가로 크기 이하인 자연수입니다.

풀이 방법

※주어진 라이브러리만 이용해서 풀기 위해 벡터를 스택처럼 사용하였습니다.

1. 2차원 배열 board의 y축 역할을 할 ySize를 선언

2. moves[i]번 위치에서 ySize만큼 반복해서 인형이 들어있는 위치를 찾습니다.

3-1. 바구니에 담을 때 바구니가 비어있지 않고 basket의 마지막 원소와 찾은 위치에 있는 원소가 같다면 마지막 원소와 담을 원소가 사라지므로 pop_back()을 하고 answer += 2를 해줍니다.

3-2. 위 조건에 만족하지 않는다면 basket에 원소를 담아줍니다.

4. moves[i]를 수행했으므로 다음으로 넘어가기 위해 break 해줍니다.

5. 모든 반복문이 끝나면 answer 리턴 

#include <string>
#include <vector>

using namespace std;

int solution(vector<vector<int>> board, vector<int> moves) {
    int answer = 0;
    int ySize = board.size();
    vector<int> basket;
    
    for(int i = 0; i < moves.size(); i++) {
        int k = moves[i] - 1;
        for(int j = 0; j < ySize; j++){
            if(board[j][k] != 0) {
                if(basket.empty() == false && basket.back() == board[j][k]){
                    basket.pop_back();
                    answer += 2;
                }
                else 
                    basket.push_back(board[j][k]);
                board[j][k] = 0;
                break;
            }
        }
    }
    
    return answer;
}

'프로그래머스 > 1레벨' 카테고리의 다른 글

폰켓몬/C++  (0) 2022.12.31
실패율/C++  (0) 2022.12.31
신규 아이디 추천/C++  (0) 2022.12.30
햄버거 만들기/C++  (0) 2022.12.30
[1차] 다트게임/C++  (0) 2022.12.30

+ Recent posts