https://school.programmers.co.kr/learn/courses/30/lessons/64061
moves의 원소에따라 for문을 돌리면서 탐색할 때 0이 아닌 원소를 만나면 save에 push 하고 그 원소를 0으로 만든 뒤 탐색을 종료한다.
탐색 한번 종료 후 save의 원소를 점검해서 최근에 넣은 2개가 같으면 둘다 지운 뒤 answer에 +2를 해준다.
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
int answer = 0;
vector<int> save;
for(int m : moves)
{
for(int i = 0; i < board[m - 1].size(); i++)
{
if(board[i][m - 1] != 0)
{
save.push_back(board[i][m - 1]);
board[i][m - 1] = 0;
break;
}
}
if(save.size() >= 2 && (save[save.size() - 1] == save[save.size() - 2]))
{
answer += 2;
save.pop_back();
save.pop_back();
}
}
return answer;
}
#include <string>
#include <vector>
#include <stack>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
int answer = 0;
stack<int> s;
for(int i=0;i<moves.size();i++)
{
int check = moves[i] - 1;
for(int j=0;j<board.size();j++)
{
if(board[j][check] != 0)
{
if(!s.empty() && s.top() == board[j][check])
{
s.pop();
answer += 2;
}
else
s.push(board[j][check]);
board[j][check] = 0;
break;
}
}
}
return answer;
}
방식은 비슷한데 0이아닌 원소일 때 넣기전에 저장해둔 마지막 원소랑 비교하여 같으면 아예 넣지 않고 마지막 원소를 제거하고 answer += 2를 해준다.