programmers.co.kr/learn/courses/30/lessons/64061
스택을 사용하는 문제이다.
moves를 순회하고 각 요소는 col에 해당한다.
col은 고정된 상태로 row=0부터 마지막 row까지 돌면서 0이 아닌 값이 있다면 break
0이 아닌 값이 있다면 스택에 현재 값을 푸쉬하고 두개를 터트릴 수 있는지 확인한다.
그런 다음에 0으로 바꾸고 answer+=2;한다.
#include <string>
#include <vector>
#include <iostream>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
int answer = 0;
int len = board.size();
int movelen = moves.size();
vector<int> v;
for(int i=0; i<movelen; i++){
int col = moves[i]-1;
int row = 0;
// check
while(row<len){
if(board[row][col]!=0){
v.push_back(board[row][col]);
board[row][col] = 0;
//bomb
int vsize = v.size();
if(vsize>=2 && v[vsize-1]==v[vsize-2]){
answer+=2;
v.pop_back();
v.pop_back();
}
break;
}
row++;
}
}
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 col = moves[i]-1;
for(int j=0; j<board.size(); j++){
if(board[j][col] !=0){
if(!s.empty() && s.top() == board[j][col]){
s.pop();
answer +=2;
}else{
s.push(board[j][col]);
}
board[j][col] = 0;
break;
}
}
}
return answer;
}
'알고리즘 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 2019 카카오 개발자 겨울 인턴십] 불량 사용자 (0) | 2021.01.19 |
---|---|
[프로그래머스 2019 카카오 개발자 겨울 인턴쉽] 튜플 (0) | 2021.01.19 |
[프로그래머스] 레벨3 베스트앨범 (0) | 2021.01.19 |
[프로그래머스] 레벨2 위장 (0) | 2021.01.18 |
[프로그래머스] 레벨2 전화번호 목록 (0) | 2021.01.18 |
댓글