728x90
์ฒ์ ์ด ๋ฌธ์ ๋ฅผ ์ ๊ทผํ ๋ [row][column]์ด ์์ ๋ column๋ถํฐ ์ ๊ทผ์ ํด์ผํ๋ค๋ ๊ณ ์ ๊ด๋ ๋๋ฌธ์ ์๋ก์ด 2์ฐจ์ ๋ฒกํฐ๋ฅผ ๋ง๋ค์ด์ ํด๊ฒฐ์ ํ๋ค. ์ฝ๋๋ฅผ ๋ณด๋ ์ฌ๋๋ ์ดํดํ๊ธฐ ํ๋ ๊ทธ๋ฐ ํ์ด๋ฒ์ผ๋ก ์งํํ์๋ค. ๋ถ๋ช ํ ๊ฒ์ Stack์ ๊ฐ๋ ์ ์ฌ์ฉํ๋ฉฐ ์๊ณ ๋ฆฌ์ฆ์ ์ฒ์ฒํ ๋ง๋ ๋ค๋ฉด ๊ธ๋ฐฉ ์งค ์ ์๋ ์ฝ๋์ด๋ค.
#include <string>
#include <vector>
#include <iostream>
#include <stack>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
int answer = 0;
stack<int> s;
// ์์ง์ธ ํ์๋งํผ for๋ฌธ์ ๋ฐ๋ณต์ํจ๋ค.
for(int i = 0 ; i < moves.size() ; i++) {
// index๋ผ๋ ๋ณ์์ ์์ง์ธ ์นธ์ ๋ฒํธ๋ฅผ ์ ์ฅ์ํจ๋ค.
int index = moves[i] - 1;
// board๋ square Matrix์ด๋ฏ๋ก ํด๋น size ๋งํผ ๋ฐ๋ณต์ํจ๋ค.
for(int j = 0 ; j < board.size() ; j++) {
// ์์ง์ธ ์นธ์ ์ ์ผ ์ ๋ฒํธ๋ 0์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ์ฒ์ ๋ง๋ ๊ฒฝ์ฐ
if(board[j][index] != 0) {
// stack์ด ๋น์ด์์ง ์๊ณ stack์ top์ด ๋ฃ์ผ๋ ค๋ ๊ฒ๊ณผ ๋์ผํ ๊ฒฝ์ฐ
if(!s.empty() && s.top() == board[j][index]) {
// ๊ธฐ์กด stack์ top์ ์ ๊ฑฐํ๋ค.
s.pop();
// ๋ ๊ฐ๊ฐ ํฐ์ง๋ฏ๋ก 2๋งํผ ์ฆ๊ฐ์ํจ๋ค.
answer += 2;
}
// ์๋ ๊ฒฝ์ฐ stack์ push ํด์ค๋ค.
else {
s.push(board[j][index]);
}
// ์์ง์ธ ์ธํ์ 0์ผ๋ก ์ต์ ํ๋ฅผ ์์ผ ์์ ์ฃผ๋ ํจ๊ณผ๋ฅผ ๋ธ๋ค.
board[j][index] = 0;
break;
}
}
}
cout << answer << endl;
return answer;
}