티스토리 뷰
성공 코드(내 코드)
- moves의 크기 만큼 for문을 돌며
- moves 원소의 값에 해당되는 board의 열을 탐색한다.
- `이 때 위에서 아래로 탐색하며 0보다 큰 숫자가 발견되면 해당 원소 값을 바구니에 넣고 0으로 만들어준다.
- 그리고 반복문을 빠져나온다.
- 바구니 안 원소가 2개 이상인 경우
- 마지막 원소와 그 앞의 원소를 비교하여 값이 같으면 인형이 터지므로 answer을 2 증가시키고 해당되는 두 원소를 바구니에서 지운다.
- moves 원소의 값에 해당되는 board의 열을 탐색한다.
#include <string>
#include <vector>
using namespace std;
int solution(vector<vector<int>> board, vector<int> moves) {
int answer = 0;
vector<int> basket;
for(int i=0; i<moves.size(); i++){
int loc=moves[i]-1;
for(int j=0; j<board.size(); j++){
if(board[j][loc]>0){
basket.push_back(board[j][loc]);
board[j][loc]=0;
break;
}
}
if(basket.size()>=2){
int end=basket.size()-1;
if(basket[end]==basket[end-1]){
answer+=2;
basket.erase(basket.begin()+end);
basket.erase(basket.begin()+end-1);
}
}
}
return answer;
}
다른 사람 풀이
- 스택을 사용한다.
- moves의 크기만큼 for문을 돌며
- moves 원소의 값에 해당되는 board의 열을 탐색한다.
- 이 때 위에서 아래로 탐색하며 해당 원소의 값이 0이 아니면
- 스택 s가 비어있지 않고 스택 s의 가장 위에 있는 값과 해당 원소의 값이 같으면 스택 s의 원소를 pop하고 answer을 2 증가시킨다.
- 위의 경우가 아니라면 해당 원소를 스택에 넣어준다.
- 그리고 해당 원소의 값을 0으로 만들어준다.
- 이 과정이 끝난 후 반복문을 빠져나온다.
- 이 때 위에서 아래로 탐색하며 해당 원소의 값이 0이 아니면
- moves 원소의 값에 해당되는 board의 열을 탐색한다.
#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;
}
'알고리즘' 카테고리의 다른 글
[프로그래머스/c++] 숫자 문자열과 영단어 (0) | 2022.08.24 |
---|---|
[프로그래머스/c++] 키패드 누르기 (0) | 2022.08.24 |
[프로그래머스/c++] 소수 만들기 (0) | 2022.08.19 |
[프로그래머스/c++] 폰켓몬 (0) | 2022.08.18 |
[프로그래머스/c++] 완주하지 못한 선수 (0) | 2022.08.18 |