-
크레인 인형뽑기 게임프로그래머스알고리즘 2021. 3. 17. 18:54
board 배열
[00000]
[00103]
[02501]
[42442]
[35131]
moves 배열
[1,5,3,5,1,2,1,4]
1.board 배열을 순회하면서 값이 있는 배열을(0이 아닌값) 찾음
board[1,2,3,4,5][1]
board[1,2,3,4,5][5]
board[1,2,3,4,5][3]
board[1,2,3,4,5][5]
board[1,2,3,4,5][1]
board[1,2,3,4,5][2]
board[1,2,3,4,5][1]
board[1,2,3,4,5][4]
2.값을 찾으면 tmp vector에 순차적으로 적재를 해준다. 이때 적재를 한 후 현재 vector전의 값과 현재 값이 같다면
erase 사용하여 값 2개 삭제 - > answer +2
3.board배열에서 찾았던 값은 크레인으로 뽑아갔으니 0으로 변환시켜줌
4.break 종료
#include <string> #include <vector> using namespace std; int solution(vector<vector<int>> board, vector<int> moves) { int answer = 0; vector<int> tmp; int tmps = 0; for(int i=0;i<moves.size();i++) { for(int j=0;j<board.size();j++) { if(board[j][moves[i]-1]!=0) { tmp.push_back(board[j][moves[i]-1]); if(tmp.size()>1&&tmp[tmp.size()-2] == tmp[tmp.size()-1]) { tmp.erase(tmp.begin()+tmp.size()-2); tmp.erase(tmp.begin()+tmp.size()-1); answer=answer+2; } board[j][moves[i]-1] = 0; break; } } } return answer; }
test code
#include<iostream> #include<vector> using namespace std; int main() { vector<vector<int>> board = {{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}}; vector<int> moves = {1,5,3,5,1,2,1,4}; int answer = 0; vector<int> tmp; int tmps = 0; for(int i=0;i<moves.size();i++) { for(int j=0;j<board.size();j++) { if(board[j][moves[i]-1]!=0) { tmp.push_back(board[j][moves[i]-1]); if(tmp.size()>1&&tmp[tmp.size()-2] == tmp[tmp.size()-1]) { tmp.erase(tmp.begin()+tmp.size()-2); tmp.erase(tmp.begin()+tmp.size()-1); answer=answer+2; } board[j][moves[i]-1] = 0; break; } } } cout << answer; }