[プログラマー/レベル1]クレーン型綱引きゲーム(2019ココア開発者冬季実習)(C++)
プログラマー-Lv 1。クレーン型抽出ゲーム(2019 KACA開発者冬季実習)
人形が保管しているスタックを抽出する必要があります. 板の配列は動作基準であるが、抜去は列を基準としなければならない. ステップで与えられたインデックスに注意してください.(movesの1はboardの0) 移動要素数繰り返し人形を抽出します. このとき、この列に人形があるか確認して(0ではない)、人形があれば抜くことができます. 人形を抽出する前に、人形を保管するスタックに人形があるかどうかを確認します. スタックに人形がない場合は、すぐに人形をスタックに抜き(人形が爆発しないため)、boradでセルを0に変更します. スタックにぬいぐるみがあれば、今つかむぬいぐるみと同じぬいぐるみかどうか確認します. のような人形なら、人形を爆発させます!(回答+=2)、スタックの最上位のぬいぐるみをポップアップし、boardで0に変更します. スタックのぬいぐるみが同じぬいぐるみでない場合は、直接スタックに入れ、boradから0になります. 個の箱に従って、必ず人形を取り出して折って処理します.(人形は一度に1個しか抽出できないので)
👉 Stackを使用する場合は、stackヘッダファイルを含める必要があります. s.push(2); スタックに2(値)を追加します. s.pop(); スタック内の最上位要素 を削除 s.top(); スタックの最上位要素 を返します. s.size(); 戻りスタックサイズ s.empty(); スタックが空の場合true s.swap(s1); スタックs 1と要素置換
指定した碁盤を行ごとに置換して列ごとに展開します.
boardの実行基準なので、最初は少し混同していましたが、問題自体は単純な問題のようです.
問題自体もスタックを使うことを教えてくれました…!
1.質問
2.アクセス/チェックポイント
3.解決方法
4.完全なコード
#include <string>
#include <vector>
#include <stack>
#include<iostream>
using namespace std;
int answer = 0;
int solution(vector<vector<int> > board, vector<int> moves) {
stack<int> doll; //인형을 뽑아서 보관할 stack
for(int i = 0; i<moves.size(); i++){
for(int j=0; j<board.size(); j++){
//board판에 인형이 있으면 뽑아야함
if(board[j][moves[i]-1] != 0){
//스택에 인형이 없으면 같은지 검사 안하고 바로 스택에 넣을 수 있음
if(doll.empty()){
doll.push(board[j][moves[i]-1]); //뽑아서 stack에 넣고
board[j][moves[i]-1] = 0; //board에서 뽑기 처리
break; //한 번에 인형 하나씩 뽑을 수 있음
}else{ //스택에 이미 인형이 있다면
//스택에 넣기 전에 스택의 최상단에 같은 인형이 있는지 확인해야함
//같은 인형이 있으면
if(doll.top() == board[j][moves[i]-1]){
answer +=2; //같은 인형이면 터트리기, 2개씩 터지니까 +2
doll.pop(); //stack에서 터진 인형 빼기
board[j][moves[i]-1] = 0; //board에서 뽑기 처리
break;
}else{
//같은 인형이 없으면 그냥 넣기
doll.push(board[j][moves[i]-1]); //뽑아서 stack에 넣고
board[j][moves[i]-1] = 0; //board에서 뽑기 처리
break;
}
}
}else{
continue; //인형이 없으면 pass
}
}
}
return answer;
}//end of solution
5.注意事項
👉 Stackを使用する場合は、stackヘッダファイルを含める必要があります.
#include<stack>
👉 Stack相関関数の整理6.他の方法を試みる
指定した碁盤を行ごとに置換して列ごとに展開します.
function grabDolls(transposedBoard, moves){
let vanishedDolls = 0; // 사라진 총 인형의 수
let stackedDolls = []; // 뽑혀서 쌓인 인형의 배열
moves.map((move) => {
// 쌓인 인형의 수
let stackedDollsCount = stackedDolls.length;
// 만일 집게가 간 열에 인형이 존재한다면, (인형이 없을 수 있음)
if(transposedBoard[move-1].length > 0){
// 집게에 잡힌 인형은 첫번째 인형
let grabbedDoll = transposedBoard[move-1].shift();
// 쌓인 인형이 있고, 맨 위에 쌓인 인형이 집게에 잡힌 인형과 같은 인형이라면 쌓인 인형 없애기
if(stackedDollsCount > 0 &&
stackedDolls[stackedDollsCount-1]
=== grabbedDoll){
stackedDolls.pop();
// 인형은 한번에 2개씩 사라지기 때문에 2개 더하기
vanishedDolls += 2;
}else {
// 만일 쌓여있던 인형과 일치하지 않으면 인형을 그냥 쌓기
stackedDolls.push(grabbedDoll);
}
}
});
// 총 사라진 인형이 정답
return vanishedDolls;
}
コードソース 7.後期
boardの実行基準なので、最初は少し混同していましたが、問題自体は単純な問題のようです.
問題自体もスタックを使うことを教えてくれました…!
Reference
この問題について([プログラマー/レベル1]クレーン型綱引きゲーム(2019ココア開発者冬季実習)(C++)), 我々は、より多くの情報をここで見つけました https://velog.io/@qhsh866/프로그래머스C-Level1.-크레인-인형뽑기-게임2019-카카오-개발자-겨울-인턴십テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol